ListViewにおいて、リスト項目をひとまとまりごとに表示することに
少し時間がかかったのでメモ。
言葉でなんて説明すればいいのかがわからなかったので、
最初に最終目標を画像で載せます。
こんな感じ↓
では、早速作って行きましょう。
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の作り方はここでは割愛。
下記を参照してください。
ここで重要なのは、
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" />
以上です。
最後まで、見ていただきありがとうございました。
もし、ご意見、質問等ございましたら、どんな些細なことでも、厳しいご意見であってもぜひコメント欄にお書きください。
お待ちしております。