RecycleView 的多布局

第一個(gè)布局item_one:

? ? <TextView

? ? ? ? android:id="@+id/textview"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="44dp"

? ? ? ? android:background="#ed9b9b"

? ? ? ? android:gravity="center"

? ? ? ? android:text="" />


第二個(gè)布局item_two:

? ? <ImageView

? ? ? ? android:layout_margin="5dp"

? ? ? ? android:id="@+id/img"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="250dp"

? ? ? ? />


第三個(gè)布局item_three:

? ? <Button

? ? ? ? android:id="@+id/btn_one"

? ? ? ? android:layout_width="0dp"

? ? ? ? android:layout_height="50dp"

? ? ? ? android:layout_margin="5dp"

? ? ? ? android:layout_weight="1"

? ? ? ? android:text="" />

? ? <Button

? ? ? ? android:id="@+id/btn_two"

? ? ? ? android:layout_width="0dp"

? ? ? ? android:layout_height="50dp"

? ? ? ? android:layout_margin="5dp"

? ? ? ? android:layout_weight="1"

? ? ? ? android:text="" />


第四個(gè)布局item_four:

? ? <ImageView

? ? ? ? android:id="@+id/img_four"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="250dp"

? ? ? ? />

? ? <LinearLayout

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="200dp"

? ? ? ? android:orientation="horizontal">

? ? ? ? <TextView

? ? ? ? ? ? android:id="@+id/tv_one"

? ? ? ? ? ? android:layout_width="0dp"

? ? ? ? ? ? android:layout_height="match_parent"

? ? ? ? ? ? android:layout_weight="1"

? ? ? ? ? ? android:background="#85d6df"

? ? ? ? ? ? android:gravity="center"

? ? ? ? ? ? android:text=""

? ? ? ? ? ? android:textSize="16sp" />

? ? ? ? <TextView

? ? ? ? ? ? android:id="@+id/tv_two"

? ? ? ? ? ? android:layout_width="0dp"

? ? ? ? ? ? android:layout_height="match_parent"

? ? ? ? ? ? android:layout_weight="1"

? ? ? ? ? ? android:background="#d188c5"

? ? ? ? ? ? android:gravity="center"

? ? ? ? ? ? android:text=""

? ? ? ? ? ? android:textSize="16sp" />

? ? </LinearLayout>


主要界面的布局:

? ? <android.support.v7.widget.RecyclerView

? ? ? ? android:id="@+id/recycle"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="match_parent"

? ? ? ? android:layout_margin="16dp"></android.support.v7.widget.RecyclerView>


布局布好了接下里recycleview重要的就是adapter了,我先貼出adapter的所有的代碼在分快的講解。

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

? ? private Context context = null;

? ? private LayoutInflater inflater = null;

? ? private ItemClick click = null;

? ? public MyAdapter(Context context) {

? ? ? ? this.context = context;

? ? ? ? inflater = LayoutInflater.from(context);

? ? }

? ? @Override

? ? public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

? ? ? ? switch (viewType) {

? ? ? ? ? ? case ONE_ITEM:

? ? ? ? ? ? ? ? View view1 = inflater.inflate(R.layout.item_one, parent, false);

? ? ? ? ? ? ? ? OneHolder oneHolder = new OneHolder(view1);

? ? ? ? ? ? ? ? return oneHolder;

? ? ? ? ? ? case TWO_ITEM:

? ? ? ? ? ? ? ? View view2 = inflater.inflate(R.layout.item_two, parent, false);

? ? ? ? ? ? ? ? TwoHolder twoHolder = new TwoHolder(view2);

? ? ? ? ? ? ? ? return twoHolder;

? ? ? ? ? ? case THREE_ITEM:

? ? ? ? ? ? ? ? View view3 = inflater.inflate(R.layout.item_three, parent, false);

? ? ? ? ? ? ? ? ThreeHolder threeHolder = new ThreeHolder(view3);

? ? ? ? ? ? ? ? return threeHolder;

? ? ? ? ? ? case FOUR_ITEM:

? ? ? ? ? ? ? ? View view4 = inflater.inflate(R.layout.item_four, parent, false);

? ? ? ? ? ? ? ? FourHolder fourHolder = new FourHolder(view4);

? ? ? ? ? ? ? ? return fourHolder;

? ? ? ? }

? ? ? ? return null;

? ? }

? ? @Override

? ? public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

? ? ? ? if (holder instanceof OneHolder) {

? ? ? ? ? ? OneHolder oneHolder = (OneHolder) holder;

? ? ? ? ? ? oneHolder.textView.setText("我是頭部");

? ? ? ? }

? ? ? ? if (holder instanceof TwoHolder) {

? ? ? ? ? ? TwoHolder twoHolder = (TwoHolder) holder;

? ? ? ? ? ? twoHolder.img.setImageResource(R.mipmap.four);

? ? ? ? }

? ? ? ? if (holder instanceof ThreeHolder) {

? ? ? ? ? ? ThreeHolder threeHolder = (ThreeHolder) holder;

? ? ? ? ? ? threeHolder.btn_one.setText("按鈕1號(hào)");

? ? ? ? ? ? threeHolder.btn_two.setText("按鈕2號(hào)");

? ? ? ? }

? ? ? ? if (holder instanceof FourHolder) {

? ? ? ? ? ? FourHolder fourHolder = (FourHolder) holder;

? ? ? ? ? ? fourHolder.img_four.setImageResource(R.mipmap.one);

? ? ? ? ? ? fourHolder.tv_one.setText("海賊王");

? ? ? ? ? ? fourHolder.tv_two.setText("灑家賣蘑菇");

? ? ? ? }

? ? }

? ? @Override

? ? public int getItemCount() {

? ? ? ? return 4;

? ? }

? ? private final int ONE_ITEM = 0;

? ? private final int TWO_ITEM = 1;

? ? private final int THREE_ITEM = 2;

? ? private final int FOUR_ITEM = 3;

? ? @Override

? ? public int getItemViewType(int position) {

? ? ? ? if (position == ONE_ITEM) {

? ? ? ? ? ? return ONE_ITEM;

? ? ? ? } else if (position == TWO_ITEM) {

? ? ? ? ? ? return TWO_ITEM;

? ? ? ? } else if (position == THREE_ITEM) {

? ? ? ? ? ? return THREE_ITEM;

? ? ? ? } else if (position == FOUR_ITEM) {

? ? ? ? ? ? return FOUR_ITEM;

? ? ? ? }

? ? ? ? return 0;

? ? }

? ? class OneHolder extends RecyclerView.ViewHolder {

? ? ? ? private TextView textView = null;

? ? ? ? public OneHolder(View itemView) {

? ? ? ? ? ? super(itemView);

? ? ? ? ? ? textView = (TextView) itemView.findViewById(R.id.textview);

? ? ? ? }

? ? }

? ? class TwoHolder extends RecyclerView.ViewHolder {

? ? ? ? private ImageView img = null;

? ? ? ? public TwoHolder(View itemView) {

? ? ? ? ? ? super(itemView);

? ? ? ? ? ? img = (ImageView) itemView.findViewById(R.id.img);

? ? ? ? }

? ? }

? ? class ThreeHolder extends RecyclerView.ViewHolder {

? ? ? ? private Button btn_one, btn_two = null;

? ? ? ? public ThreeHolder(View itemView) {

? ? ? ? ? ? super(itemView);

? ? ? ? ? ? btn_one = (Button) itemView.findViewById(R.id.btn_one);

? ? ? ? ? ? btn_two = (Button) itemView.findViewById(R.id.btn_two);

? ? ? ? }

? ? }

? ? class FourHolder extends RecyclerView.ViewHolder {

? ? ? ? private ImageView img_four = null;

? ? ? ? private TextView tv_one, tv_two = null;

? ? ? ? public FourHolder(View itemView) {

? ? ? ? ? ? super(itemView);

? ? ? ? ? ? img_four = (ImageView) itemView.findViewById(R.id.img_four);

? ? ? ? ? ? tv_one = (TextView) itemView.findViewById(R.id.tv_one);

? ? ? ? ? ? tv_two = (TextView) itemView.findViewById(R.id.tv_two);

? ? ? ? }

? ? }

}



第一步先看看Holder吧

第一個(gè)布局的holder

class OneHolder extends RecyclerView.ViewHolder {

? ? ? ? private TextView textView = null;

? ? ? ? public OneHolder(View itemView) {

? ? ? ? ? ? super(itemView);

? ? ? ? ? ? textView = (TextView) itemView.findViewById(R.id.textview);

? ? ? ? }

? ? }


這里有幾個(gè)布局就寫(xiě)幾個(gè)holder,我這里寫(xiě)了4個(gè)布局所以有4個(gè)holder,代碼上面都有我就不依次貼出來(lái)了。這個(gè)相信大家都能夠看懂。

第二步:

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

@Override

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {...}

@Override

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {...}

@Override

public int getItemCount() {return null;}

}


自定義的holder繼承了recycleview的adapter重寫(xiě)了3個(gè)方法:

放布局文件:

@Override

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {...}


綁定數(shù)據(jù):

@Override

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {...}


有多少個(gè)item:

@Override

public int getItemCount() {return null;}


第三步:

private final int ONE_ITEM = 0;

private final int TWO_ITEM = 1;

private final int THREE_ITEM = 2;

private final int FOUR_ITEM = 3;

@Override

public int getItemViewType(int position) {

? ? if (position == ONE_ITEM) {

? ? ? ? ? ? return ONE_ITEM;

? ? } else if (position == TWO_ITEM) {

? ? ? ? ? ? return TWO_ITEM;

? ? } else if (position == THREE_ITEM) {

? ? ? ? ? ? return THREE_ITEM;

? ? } else if (position == FOUR_ITEM) {

? ? ? ? ? ? return FOUR_ITEM;

? ? }

? ? ? ? return 0;

? ? }


先來(lái)看看這個(gè)方法:

@Override

public int getItemViewType(int position) {...}

這個(gè)就是來(lái)區(qū)分有多少個(gè)布局

position = 0 的時(shí)候就是整個(gè)recycleview的第一行

position = 1 的時(shí)候就是整個(gè)recycleview的第二行

position = 2 的時(shí)候就是整個(gè)recycleview的第三行

position = 3 的時(shí)候就是整個(gè)recycleview的第四行

這就滿足了我們每一行都是不同布局的要求。

接下來(lái)就到第二步的:

綁定布局的這個(gè)方法中來(lái)。

@Override

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {...}


這個(gè)方法里面有一個(gè)viewtype這個(gè)就是來(lái)區(qū)分布局的。

所以在這個(gè)方法里面我用了一個(gè)switch循環(huán)來(lái)區(qū)分是哪個(gè)布局。

@Override

? ? public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

? ? ? ? switch (viewType) {

? ? ? ? ? ? case ONE_ITEM:

? ? ? ? ? ? ? ? View view1 = inflater.inflate(R.layout.item_one, parent, false);

? ? ? ? ? ? ? ? OneHolder oneHolder = new OneHolder(view1);

? ? ? ? ? ? ? ? return oneHolder;

? ? ? ? ? ? case TWO_ITEM:

? ? ? ? ? ? ? ? View view2 = inflater.inflate(R.layout.item_two, parent, false);

? ? ? ? ? ? ? ? TwoHolder twoHolder = new TwoHolder(view2);

? ? ? ? ? ? ? ? return twoHolder;

? ? ? ? ? ? case THREE_ITEM:

? ? ? ? ? ? ? ? View view3 = inflater.inflate(R.layout.item_three, parent, false);

? ? ? ? ? ? ? ? ThreeHolder threeHolder = new ThreeHolder(view3);

? ? ? ? ? ? ? ? return threeHolder;

? ? ? ? ? ? case FOUR_ITEM:

? ? ? ? ? ? ? ? View view4 = inflater.inflate(R.layout.item_four, parent, false);

? ? ? ? ? ? ? ? FourHolder fourHolder = new FourHolder(view4);

? ? ? ? ? ? ? ? return fourHolder;

? ? ? ? }

? ? ? ? return null;

? ? }


綁定完成布局以后我們就應(yīng)該插入數(shù)據(jù):

就在第二步的

@Override

? ? public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

? ? ? ? if (holder instanceof OneHolder) {

? ? ? ? ? ? OneHolder oneHolder = (OneHolder) holder;

? ? ? ? ? ? oneHolder.textView.setText("我是頭部");

? ? ? ? }

? ? ? ? if (holder instanceof TwoHolder) {

? ? ? ? ? ? TwoHolder twoHolder = (TwoHolder) holder;

? ? ? ? ? ? twoHolder.img.setImageResource(R.mipmap.four);

? ? ? ? }

? ? ? ? if (holder instanceof ThreeHolder) {

? ? ? ? ? ? ThreeHolder threeHolder = (ThreeHolder) holder;

? ? ? ? ? ? threeHolder.btn_one.setText("按鈕1號(hào)");

? ? ? ? ? ? threeHolder.btn_two.setText("按鈕2號(hào)");

? ? ? ? }

? ? ? ? if (holder instanceof FourHolder) {

? ? ? ? ? ? FourHolder fourHolder = (FourHolder) holder;

? ? ? ? ? ? fourHolder.img_four.setImageResource(R.mipmap.one);

? ? ? ? ? ? fourHolder.tv_one.setText("海賊王");

? ? ? ? ? ? fourHolder.tv_two.setText("灑家賣蘑菇");

? ? ? ? }

? ? }


instanceof它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)。

因?yàn)槲覀冞@里是開(kāi)始是繼承他原有的adapter和holder所以我們這里要把,他原有的holder轉(zhuǎn)換成自己的holder。

OneHolder oneHolder = (OneHolder) holder;

因此就有了這一步。

好了重要的部分也就嗶嗶完了。

還是吧主頁(yè)面的代碼貼一下吧

public class MoreActivity extends AppCompatActivity{

? ? private RecyclerView recyclerView = null;

? ? private MyAdapter adapter = null;

? ? @Override

? ? protected void onCreate(@Nullable Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_more);

? ? ? ? recyclerView = (RecyclerView) findViewById(R.id.recycle);

? ? ? ? RecyclerView.LayoutManager manager = new LinearLayoutManager(this);

? ? ? ? recyclerView.setLayoutManager(manager);

? ? ? ? adapter = new MyAdapter(this);

? ? ? ? recyclerView.setAdapter(adapter);

? ? ? ? adapter.notifyDataSetChanged();

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容