简单说一下RecyclerView

来源:互联网 发布:revit软件插件探索者 编辑:程序博客网 时间:2024/04/20 15:23

一般情况下使用listview,gridview其实就可以满足需求啥的,如果需求经常变更的话,可以考虑使用recyclerview

感觉这个控件比listview啥的更能体现面向对象的思想,我不在乎过程,只在乎最后的结果,是吧,工作生活也一样,只看你混的好不好,不在乎你吃过多少苦,扯远了

还是老规矩,废话不多说上代码

activity

package com.fanyafeng.nested.RecyclerView;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Toolbar;import android.view.View;import android.widget.LinearLayout;import com.fanyafeng.nested.BaseActivity;import com.fanyafeng.nested.R;import java.util.ArrayList;import java.util.List;public class RecyclerViewActivity extends BaseActivity {        private String imageUri = "http://www.apkbus.com/data/attachment/forum/201402/27/154958qgczo5a17ia3u3c4.png";//    private String imageUri = "http://img2.cache.netease.com/stock/2016/2/25/20160225133750f7294_550.png";    private RecyclerView test_recyclerview;    private RecyclerView.LayoutManager layoutManager;    private RecyclerViewAdapter recyclerViewAdapter;    private List<String> stringList = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_recycler_view);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });        initView();        initData();    }    private void initView() {        test_recyclerview = (RecyclerView) findViewById(R.id.test_recyclerview);//        layoutManager = new LinearLayoutManager(this, LinearLayout.VERTICAL, false);        layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);    }    private void initData() {        for (int i = 0; i < 21; i++) {            stringList.add(imageUri);        }        recyclerViewAdapter = new RecyclerViewAdapter(this, stringList);        test_recyclerview.setAdapter(recyclerViewAdapter);        test_recyclerview.setLayoutManager(layoutManager);    }}
偷了一下懒,没有写bean,直接用的string当作实体

adapter

package com.fanyafeng.nested.RecyclerView;import android.content.Context;import android.net.Uri;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.fanyafeng.nested.R;import com.fanyafeng.nested.utils.MyUtils;import java.util.List;/** * Created by fanyafeng on 2016/2/25,0025. */public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {    public interface OnItemClickListener {        void onItemClick(View view, int position);        void onItemLongClick(View view, int position);    }    public OnItemClickListener onItemClickListener;    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {        this.onItemClickListener = onItemClickListener;    }    public Context context;    public List<String> stringList;    public LayoutInflater layoutInflater;    public RecyclerViewAdapter(Context context, List<String> stringList) {        this.context = context;        this.stringList = stringList;        layoutInflater = LayoutInflater.from(context);    }    @Override    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = layoutInflater.inflate(R.layout.item_recycle_layout, parent, false);        RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view);        return recyclerViewHolder;    }    @Override    public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {        if (onItemClickListener != null) {            holder.item_simp.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    onItemClickListener.onItemClick(holder.item_simp, position);                }            });            holder.item_simp.setOnLongClickListener(new View.OnLongClickListener() {                @Override                public boolean onLongClick(View v) {                    onItemClickListener.onItemLongClick(holder.item_simp, position);                    return true;                }            });        }        holder.item_simp.setImageURI(Uri.parse(stringList.get(position)));        holder.item_simp.setMaxWidth(MyUtils.getScreenWidth(context));        holder.item_simp.setAdjustViewBounds(true);        holder.item_simp.setAspectRatio(.6f);    }    @Override    public int getItemCount() {        return stringList.size();    }}
viewholder

package com.fanyafeng.nested.RecyclerView;import android.support.v7.widget.RecyclerView;import android.view.View;import com.facebook.drawee.view.SimpleDraweeView;import com.fanyafeng.nested.R;/** * Created by fanyafeng on 2016/2/25,0025. */public class RecyclerViewHolder extends RecyclerView.ViewHolder {    public SimpleDraweeView item_simp;    public RecyclerViewHolder(View itemView) {        super(itemView);        item_simp = (SimpleDraweeView) itemView.findViewById(R.id.item_simp);    }}


这里着重说一下viewholder,大多数人的习惯应该都是自己写holder然后用tag吧,除非特殊情况,全部动态添加布局等等

这里的话是强制要求使用viewholder的,而且adapter中有绑定数据的相应周期,这里的话可以采用mvc模式理解一下,这里的controller功能强大,但是adapter中需要自己定义相应的click接口,网上资料不是多,有的问题需要看源码比如手势拦截,就踩到坑里了这个功能是强大,但是用到自己的项目里是否合适还是需要大家斟酌


Everynight the littlepeople would waddle home , full of Cheese , and every morningthey would confidently retrun for more.




0 0
原创粉丝点击