您的位置:首页 > 其它

Recycler自定义组件二

2016-07-14 22:05 411 查看


这是要做的效果图

同样需要RecyclerView,所以说这玩意好强大。

由图看出,需要两个layout分别左对齐右对齐,还需要个LinearLayoutManager就可以简单实现,。

步骤嘛如下:

1.首先,两个布局分别和两边对齐,这个看个人喜好了,想弄多难看就弄多难看,反正现在没人看;

2.别忘了导个RecyclerVIew包,没她你嘛事都做不了,在主布局放入这个RecyclerView控件,将来

view就放在这里;

以上呢准别工作完成后,就是main里面功能了;

3.一样,声明属性并找到id,尤其是RecyclerView,和一个数据包List;

4.这个布局是建立在linearLayoutManager上的,所以布局管理器如下

recyclerview.setLayoutManager(new LinearLayoutManager(this));

接下来收集咱们的数据:

5.建一个createData方法,还要建一个类MyData,创一个构造方法

参数分别是text,image和类型type

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;   }}

new一个ArrayList,然后装数据(我太懒,就装了四个)

public void createData() {
list = new ArrayList<>();
MyData data1 = new MyData("晚上一起吃饭?",R.drawable.mm3, 0);
MyData data2 = new MyData("我减肥",R.drawable.ff2, 1);
MyData data3 = new MyData("给你脸了,你还没奥巴马黑",R.drawable.ff2, 1);
MyData data4 = new MyData("我明天就去晒太阳",R.drawable.mm3, 0);
list.add(data1);
list.add(data2);
list.add(data3);
list.add(data4);}

6.上面还是基本工作,接下来还需要有个适配器Adapter,那就造呗;

和之前不同的是,这次的方法里多了个getItemViewType方法,获取list中的数据的类型,

@Override
public int getItemViewType(int position) {
return list.get(position).type;
}

7.既然造了那么多了,那就把ViewHolder也就造出来的了,这里要注意的是,我们需要的是两个ViewHolder,

分别为两边提供声明好的id(太长而且都会,我就不贴了);

因为是两边分治,所以,Adapter中的方法基本上都是复制两边而已,偶尔改一改重复的变量名;

分治是利用类型Type来区分的,

这里可以用一个switch来进行case选择

switch (viewType) {
case 0:
View view0 = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_0, null);
MyViewHolder0 holder0 = new MyViewHolder0(view0);
return holder0;
case 1:
View view1 = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_1, null);
MyViewHolder1 holder1 = new MyViewHolder1(view1);
return holder1;
}

onBinViewHolder里一样可以用switch来写,

MyData中那对象,获取数据类型,按类型分情况提取资源并放到桌面上

MyData data = list.get(position);
int type = data.type;
switch (type) {
case 0:
MyViewHolder0 holder0 = (MyViewHolder0) holder;
holder0.imageview.setImageResource(data.image);
holder0.textview.setText(data.text);
break;
case 1:
MyViewHolder1 holder1 = (MyViewHolder1) holder;
holder1.textview.setText(data.text);
holder1.imageview.setImageResource(data.image);
break;
}
}


然后,大!功!告!成!

1

1111
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息