第一個(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();
? ? }
}