android studio中使用recyclerview小白篇(二)

时间:2024-03-24 14:45:33

前面一个说了怎么把这个包引用进来,这一节说怎么做一个简单的例子出来,我也是照着别人的例子写的,然后慢慢改就行了,做好的效果如下图

android studio中使用recyclerview小白篇(二)

1.在我们的activity_main中把recyclerview填加进来.

1
2
3
4
5
<android.support.v7.widget.RecyclerView
        android:id="@+id/recy_list"
        android:dividerHeight="1dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

然后在相对应的java中增加引用

1
import android.support.v7.widget.RecyclerView;

  

2. 编写一个recyclerview使用的xml文件,直接新建一个layout xml file就可以了,我的叫item_view.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00bbcc">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/txt_xs"
        android:layout_alignParentLeft="true"
        android:gravity="center_vertical|center_horizontal" />
    <TextView
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:id="@+id/txt_msg"
        android:text="Medium Text"
        android:layout_alignParentRight="true"
        android:gravity="center_vertical|center_horizontal"
        />
 
</RelativeLayout>

出来的布局样子就是左右分开,左边显示文件名称,右边显示文件状态,效果看上面的图.

 

3.编写一个关于文件的实体类,只需要有个get方法就行了.我的叫filelist.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class filelist {
    private String Name;  //文件名称
    private String Zt;    //状态
 
    public filelist(){
 
    }
    public filelist(String name,String zt){
        this.Name=name;
        this.Zt=zt;
    }
    public String getName(){
        return Name;
    }
    public String getZt(){
        return Zt;
    }
}

这个主要用于存放每一行的数据,可以按需要增加,一个和两个有区别,但是两个和五个没啥区别,一个你可以用string,两个就不行了.

 

4. 编写数据适配器,关键的就是这个地方了,原来的例子作者传入的是个list<string>,只能有一个项,为了传入多个项,我们定义了filelist,在这个地方传入了.通过getname,getzt来获取里面的值,加入了隔行变色,其实也可以加入按内容变色,比如文件的状态,如是已阅读,变成一种色,未阅读另一种颜色,在onBindViewHolder中通过判断da.getZt()的值就行了,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import java.util.List;
 
/**
 * Created by user on 2017-07-26.
 */
public class myRecycleradatper extends RecyclerView.Adapter<myRecycleradatper.MyViewHolder> {
    private List<filelist> mDatas;
    private Context mContext;
    private LayoutInflater inflater;
 
    public myRecycleradatper(Context context, List<filelist> datas){
        this. mContext=context;
        this. mDatas=datas;
        inflater=LayoutInflater. from(mContext);
    }
 
    @Override
    public int getItemCount() {
        return mDatas.size();
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 
        View view = inflater.inflate(R.layout.item_view,parent, false);
        MyViewHolder holder= new MyViewHolder(view);
        return holder;
    }
 
    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        filelist da=mDatas.get(position);
        if(position%2==0){
            //holder.tv.setBackgroundColor(Color.BLUE);
            holder.v.setBackgroundColor(Color.GRAY);
        }
        holder.tv.setText(da.getName());
        holder.msg.setText(da.getZt());
    }
 
    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv;
        TextView msg;
        View v;
        public MyViewHolder(View view) {
            super(view);
            tv=(TextView) view.findViewById(R.id.txt_xs);
            msg=(TextView)view.findViewById(R.id.txt_msg);
            v=view;
        }
 
    }
}

  

5. 在我们的主界面中装配好数据,然后放入自定义的数据适配器中,为了简单,都是本地数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private List<filelist> mDatas;
    private myRecycleradatper recycleAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mDatas = new ArrayList<filelist>();
        filelist fl;
        String zt;
        for int i=0; i < 40; i++) {
            if (i%2==0){
                zt="已阅读";
            }else{;
                zt="未阅读";
            }
            fl=new filelist("item"+i,zt);
            mDatas.add(fl);
        }
 
        recycleAdapter=new myRecycleradatper(this,mDatas);
        RecyclerView recyclerView=(RecyclerView) findViewById(R.id.recy_list);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this );
        recyclerView.setLayoutManager(layoutManager);
       //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
        recyclerView.setHasFixedSize(true);
        //创建并设置Adapter
        recyclerView.setAdapter(recycleAdapter);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
 
    }
}

  

以前我们在listview中大家使用的较多的是list<map<string,object>>这个,也可以换成自定义的实体类试试,如果在界面布局那一步出了问题,那就得看看你的目标版本和最小版本了.还有主题,默认的主题出不来,需要换一个别的.

我是小白二把刀,欢迎一起交流.