8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android ListView において、リスト項目を1つのまとまりごとに表示する

Last updated at Posted at 2016-10-03

ListViewにおいて、リスト項目をひとまとまりごとに表示することに
少し時間がかかったのでメモ。

言葉でなんて説明すればいいのかがわからなかったので、
最初に最終目標を画像で載せます。
こんな感じ↓
スクリーンショット 2016-10-03 11.01.01.png

では、早速作って行きましょう。

myAdapter
private class myAdapter extends ArrayAdapter<Item> {
        LayoutInflater layoutInflater;
        Item item;

        myAdapter(Context context, int textViewResourceId, List<Item> list) {
            super(context, textViewResourceId, list);
            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            item = getItem(position);

            View view;
            if (item.getList1() != 0) {
                view = layoutInflater.inflate(R.layout.list1, null);
                TextView txt = (TextView) view.findViewById(R.id.list1TextView);
                txt.setText(String.valueOf(item.getList1()));
            } else {
                view = layoutInflater.inflate(R.layout.list2, null);
                TextView txt = (TextView) view.findViewById(R.id.list2TextView);
                txt.setText(String.valueOf(item.getList2()));
            }

            return view;
        }
}

Adapterの作り方はここでは割愛。
下記を参照してください。

AndroidのListViewチュートリアル

ここで重要なのは、
getViewメソッドにおいて、条件によって
Viewに入れるレイアウトを変更している点。
これによって、まとまりを持ったListViewができる
というか、これが今回の一番の肝。
これさえできれば、あとはいつも通り作るだけ!

残りのコード↓

MainActivity
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Item> list = new ArrayList<>();

        for (int i = 1; i < 11; i++) {
           for (int j = 0; j < i + 1; j++) {
               Item item = new Item();
               if (j == 0) {
                   item.setList1(i);
                   item.setList2(0);
               } else {
                   item.setList1(0);
                   item.setList2(i);
               }
               list.add(item);
           }
        }

        ListView listView = (ListView) this.findViewById(R.id.ListView);
        myAdapter adapter = new myAdapter(this, R.layout.list1, list);
        listView.setAdapter(adapter);
    }
}

myAdapterのコンストラクタの第2引数で、R.layout.list1を入れてますが、R.layout.list2を代わりに入れても問題なく動作しました。
理由は調べましたが、よくわかりませんでした。
どなたか教えてください。

Item
class Item {
    private int list1;
    private int list2;

    void setList1(int list) {
        this.list1 = list;
    }

    void setList2(int list) {
        this.list2 = list;
    }

    int getList1() {
        return list1;
    }

    int getList2() {
        return list2;
    }
}

レイアウトもこんな感じ↓

activity_main
<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:id="@+id/ListView" />
list1
<TextView
    android:text="リスト"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView2"
    android:textSize="30sp"
    android:layout_marginLeft="20dp"
    android:textColor="#FFFFFF"
    android:paddingBottom="10dp"
    android:paddingTop="10dp" />

<TextView
    android:text="1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="30sp"
    android:textColor="#FFFFFF"
    android:id="@+id/list1TextView"/>

list2
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textColor="#000000"
        android:id="@+id/list2TextView"
        android:text="1"
        android:layout_marginLeft="30dp"
        android:paddingBottom="10dp"
        android:paddingTop="10dp" />

以上です。
最後まで、見ていただきありがとうございました。

もし、ご意見、質問等ございましたら、どんな些細なことでも、厳しいご意見であってもぜひコメント欄にお書きください。
お待ちしております。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?