Android recyclerViewマルチレイアウト
13090 ワード
1.まずRecyclerViewのパッケージを導入
2.レイアウトファイルでの使用
彼のマルチレイアウトスタイルitem_を設定a.xmlレイアウト
item_b.xmlレイアウト
a.新しいインタフェースを作成し、Beanクラスはエントリカテゴリに戻るインタフェースを実現します.
b.新しい2つのサブクラスを作成して私たちのインタフェースを実現します.ここでは1つを例に挙げます.
私たちの戻りタイプは彼のレイアウトファイルであることがわかります.そうすると、彼が戻ったときに論理がはっきりします.
c.この2つのサブクラスの複数のオブジェクトをデータソースに入れるとよい
(4)Contextとデータソースを受信し、データソースの汎用性があなたのインタフェースであれば
(5)getItemViewメソッドの書き換え
このメソッドの値はonCreateViewHoldereで与えられ、異なるtypeに基づいて異なるViewHolderを作成します.
(6)異なるタイプによって異なるViewHolderを実現する
(7)バインドデータ
(8)データソースの設定
2.レイアウトファイルでの使用
.support.v7.widget.RecyclerView
android:id="@+id/myRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
彼のマルチレイアウトスタイルitem_を設定a.xmlレイアウト
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#65edfc"
android:layout_margin="5dp">
<TextView
android:id="@+id/item_a_text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="30sp"/>
<TextView
android:id="@+id/item_a_text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:background="#f5e593"
android:textSize="30sp"/>
LinearLayout>
item_b.xmlレイアウト
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#b0ed65"
android:layout_margin="5dp">
<ImageView
android:id="@+id/item_b_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/image"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/item_b_text1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="30sp"/>
<TextView
android:id="@+id/item_b_text2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="30sp"/>
LinearLayout>
LinearLayout>
a.新しいインタフェースを作成し、Beanクラスはエントリカテゴリに戻るインタフェースを実現します.
public interface TypeInterf {
public int getType();
}
b.新しい2つのサブクラスを作成して私たちのインタフェースを実現します.ここでは1つを例に挙げます.
public class Item_a implements TypeInterf {
String text1;
String text2;
public String getText1() {
return text1;
}
public void setText1(String text1) {
this.text1 = text1;
}
public String getText2() {
return text2;
}
public void setText2(String text2) {
this.text2 = text2;
}
@Override
public int getType() {
return R.layout.item_a;
}
}
私たちの戻りタイプは彼のレイアウトファイルであることがわかります.そうすると、彼が戻ったときに論理がはっきりします.
c.この2つのサブクラスの複数のオブジェクトをデータソースに入れるとよい
(4)Contextとデータソースを受信し、データソースの汎用性があなたのインタフェースであれば
private Context context;
private List list;
public MyRecyclerAdapter(Context context, List list) {
this.context = context;
this.list = list;
}
(5)getItemViewメソッドの書き換え
@Override
public int getItemViewType(int position) {
return list.get(position).getType();
}
このメソッドの値はonCreateViewHoldereで与えられ、異なるtypeに基づいて異なるViewHolderを作成します.
(6)異なるタイプによって異なるViewHolderを実現する
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = null;
View view = LayoutInflater.from(context).inflate(viewType, parent, false);
if(viewType==R.layout.item_a){
holder = new ViewHolder_a(view);
}else{
holder = new ViewHolder_b(view);
}
return holder;
}
(7)バインドデータ
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof ViewHolder_a){
((ViewHolder_a) holder).textView1.setText(((Item_a)list.get(position)).getText1());
((ViewHolder_a) holder).textView2.setText(((Item_a)list.get(position)).getText2());
}else{
((ViewHolder_b) holder).textView1.setText(((Item_b)list.get(position)).getText1());
((ViewHolder_b) holder).textView2.setText(((Item_b)list.get(position)).getText2());
}
}
(8)データソースの設定
private void initData() {
list = new ArrayList<>();
Item_a item_a = null;
Item_b item_b = null;
for (int i = 0; i < 100; i++) {
if (i%3==0) {
item_a = new Item_a();
item_a.setText1("ItemA "+i+" text1");
item_a.setText2("ItemA "+i+" text2");
list.add(item_a);
}else{
item_b = new Item_b();
item_b.setText1("ItemB "+i+" text1");
item_b.setText2("ItemB "+i+" text2");
list.add(item_b);
}
}
}