第九天·RecyclerView的不同item
要想加載不同的佈局,在Adapter裏就需要有兩種ViewHolder,分別維護不同佈局item
思路;
1、聲明recyclerView和List< MyData >list;
然後要創建MyData的類–>創建一個構建方法
在Adapter的類中用onCreateViewHolder裏
用swtch(),case0和case1進行拿到item的佈局
class MyAdapter extends RecyclerView.Adapter{
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType){
case 0:
View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_0,null);
MyViewHolder0 viewHolder0=new MyViewHolder0(view);
return viewHolder0;
case 1:
View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_1,null);
MyViewHolder1 viewHolder1=new MyViewHolder1(view1);
return viewHolder1;
}
return null;
}
2、在onBindViewHolder方法中
用switch…case…得到左右兩邊的類型
3、再創建兩個不同的ViewHolder的類,都繼承RecyclerView.ViewHolder
源碼如下:
package com.xiaogao.user.android2lesson_09_recycler2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
//聲明一個數據集合,用來處理數據
private List<MyData>list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView= (RecyclerView) findViewById(R.id.main_recyclerView);
//設置線性佈局管理器類型
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//創造數據
createData();
MyAdapter adapter=new MyAdapter();
recyclerView.setAdapter(adapter);
}
//創造數據
private void createData() {
list=new ArrayList<>();
MyData data1=new MyData("hey,man",R.drawable.zuo,0);
MyData data2=new MyData("hey,woman",R.drawable.you,1);
MyData data3=new MyData("what are you 弄啥呢",R.drawable.you,1);
MyData data4=new MyData("I want to 那個",R.drawable.zuo,0);
list.add(data1);
list.add(data2);
list.add(data3);
list.add(data4);
}
class MyData{
String text;
int image;
//標誌消息的類型
int type;
public MyData(String text,int image,int type){
this.text=text;
this.image=image;
this.type=type;
}
}
//創建一個Adapter
class MyAdapter extends RecyclerView.Adapter{
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType){
case 0:
View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_0,null);
MyViewHolder0 viewHolder0=new MyViewHolder0(view);
return viewHolder0;
case 1:
View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_1,null);
MyViewHolder1 viewHolder1=new MyViewHolder1(view1);
return viewHolder1;
}
return null;
}
//返回viewHolder的類型
@Override
public int getItemViewType(int position) {
return list.get(position).type;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//獲取數據得到類型
MyData data=list.get(position);
int type=data.type;
switch (type){
case 0:
MyViewHolder0 holder0= (MyViewHolder0) holder;
holder0.tv0.setText(data.text);
break;
case 1:
MyViewHolder1 holder1= (MyViewHolder1) holder;
holder1.tv1.setText(data.text);
break;
}
}
@Override
public int getItemCount() {
return list.size();
}
//創建佈局不同的ViewHolder
class MyViewHolder0 extends RecyclerView.ViewHolder{
TextView tv0;
ImageView iv0;
public MyViewHolder0(View itemView) {
super(itemView);
tv0= (TextView) itemView.findViewById(R.id.list_item_0_tv);
iv0= (ImageView) itemView.findViewById(R.id.item_0_iv);
}
}
class MyViewHolder1 extends RecyclerView.ViewHolder{
TextView tv1;
ImageView iv1;
public MyViewHolder1(View itemView) {
super(itemView);
tv1= (TextView) itemView.findViewById(R.id.list_item_1_tv);
iv1= (ImageView) itemView.findViewById(R.id.item_1_iv);
}
}
}
}