RecyclerView

听说RecyclerView比ListView好些,于是在网上找到代码跟着敲了一遍,现在来总结一下。
1.要使用RecyclerView首先需要导入v7包,这个大家知道导包就不详细说了。
2.写好布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
</RelativeLayout>

3.现在开始在MainActivity中写代码了
首先是得到三个成员变量:
第一个为RecyclerView控件
第二个为我每个item中传入的数据
第三个为RecyclerView的适配器

    private RecyclerView recyclerView;
    private List<String> mDatas;
    private MyAdapter mAdapter;

写好三个成员变量,就开始写方法了
1.准备好数据,即给mDatas赋值

      private void initDatas() {
        mDatas = new ArrayList<String>();
        for(int x = 'A';x<'z';x++){
            mDatas.add((char)x+"");
        }
    }

2.初始化

 private void initView() {
        recyclerView = (RecyclerView)
              findViewById(R.id.recycler);
    }

3.开始写适配器
3.1首先创建一个类继承自RecyclerView.Adapter

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>

其中MyViewHolder为自己写的ViewHolder的子类,下面会讲解。
继承之后步骤:
1.成员变量:

    private LayoutInflater layoutInflater;
    private Context mContext;
    private List<String> mDatas;

2.构造方法:

//构造方法进行初始化
    public MyAdapter(Context context,List<String> data){
        this.mContext = context;
        this.mDatas = data;
        layoutInflater = LayoutInflater.from(context);
    }

现在来写MyViewHolder,继承ViewHolder

class MyViewHolder extends RecyclerView.ViewHolder{

    public TextView text;

    public MyViewHolder(View itemView) {
        super(itemView);
        text = (TextView)itemView.findViewById(R.id.text);
    }
}

它是将每个item中的控件初始化,这样好像更高效,不用每次适配的时候都重新加载控件。

然后是父类自带方法重写:


   //创建一个ViewHolder
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   //获取每个item
        View view = layoutInflater.inflate(R.layout.item,parent,false);
        //将view作为MyViewHolder参数传入来创建MyViewHolder对象
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }

    //绑定ViewHolder
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        //给每个item赋值
        holder.text.setText(mDatas.get(position));

    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }

中间都有详细注释,就不讲了。

适配器写好之后,就只要进行适配了:

 //创建适配器对象
        mAdapter = new MyAdapter(this,mDatas);
        //传入数据
        recyclerView.setAdapter(mAdapter);
        //为了将它显示出来使用LinearLayoutManager
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
     recyclerView.setLayoutManager(linearLayoutManager);

到此为止,RecyclerView就写好了,不过这个还没有加分割线哦,分割线的代码下一篇博客再给吧。我本来不想贴代码了,准备把github地址给出来,需要可以直接下载,可是我一不小心提交了别的将它覆盖了,覆盖了啊,所以我贴个源码吧。(只怪自己太low,不会github,心疼自己3秒)。

MainActivty

public class MainActivity extends Activity {

    private RecyclerView recyclerView;
    private List<String> mDatas;
    private MyAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initDatas();
        initView();
        //创建适配器对象
        mAdapter = new MyAdapter(this,mDatas);
        //传入数据
        recyclerView.setAdapter(mAdapter);
        //为了将它显示出来使用LinearLayoutManager
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        //添加分割线
        recyclerView.addItemDecoration(new RecycleViewDivider(this,RecycleViewDivider.VERTICAL));
        recyclerView.setLayoutManager(linearLayoutManager);
    }

    private void initDatas() {
        mDatas = new ArrayList<String>();
        for(int x = 'A';x<'z';x++){
            mDatas.add((char)x+"");
        }
    }

    private void initView() {
        recyclerView = (RecyclerView)findViewById(R.id.recycler);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

MyAdapter

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

    private LayoutInflater layoutInflater;
    private Context mContext;
    private List<String> mDatas;

    //构造方法进行初始化
    public MyAdapter(Context context,List<String> data){
        this.mContext = context;
        this.mDatas = data;
        layoutInflater = LayoutInflater.from(context);
    }

    //创建一个ViewHolder
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = layoutInflater.inflate(R.layout.item,parent,false);
        //将view作为MyViewHolder参数传入来创建MyViewHolder对象
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }

    //绑定ViewHolder
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        //给每个item赋值
        holder.text.setText(mDatas.get(position));

    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }
}

class MyViewHolder extends RecyclerView.ViewHolder{

    public TextView text;

    public MyViewHolder(View itemView) {
        super(itemView);
        text = (TextView)itemView.findViewById(R.id.text);
    }
}

布局文件就不贴了,还有写Adapter之前先把item的布局写好哦,忘记讲了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值