zoukankan      html  css  js  c++  java
  • android studio中使用recyclerview小白篇(二)

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

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

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

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

    import android.support.v7.widget.RecyclerView;
    

      

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

    <?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

    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()的值就行了,

    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. 在我们的主界面中装配好数据,然后放入自定义的数据适配器中,为了简单,都是本地数据

    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>>这个,也可以换成自定义的实体类试试,如果在界面布局那一步出了问题,那就得看看你的目标版本和最小版本了.还有主题,默认的主题出不来,需要换一个别的.

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

  • 相关阅读:
    Entity Framework 学习初级篇7基本操作:增加、更新、删除、事务
    Flash Lite基础知识
    instantclient_10_2客户端配置
    Flash Player9.0 跟Flash Player8.0区别
    Adobe Flash Lite3
    flashlite3无法接入网络的解决办法
    sendAndLoad(LoadVars.sendAndLoad 方法)
    乐高模式
    FMS应用实例 从FMS服务器读取文件(图片/SWF/文本)到客户端
    as2.0 fscommand的用法
  • 原文地址:https://www.cnblogs.com/wjbych/p/7240951.html
Copyright © 2011-2022 走看看