JackRyannn Blog
  • /home
  • /archive
  • /tags
  • /about
  • /RSS

RecyclerView的使用

25 Nov 2016
  • Android

RecyclerView是2015年谷歌大会上发布的,介绍里第一句是这样说的: A flexible view for providing a limited window into a large data set.在有限的窗口内展现大量数据的灵活的视图。用它可以代替listview和gridview,更重要的是它是高度的解耦,在使用的时候就能够体会到了。

简单写的例子,在注释中有对它的解释和思考。

			public class MainActivity extends AppCompatActivity {
		//    必要的三部分,相比于listView多了一个layoutManager,layoutManager是一个抽象类
		//    用来测量和放置item,也可以制定item的回收规则,在这里,我们直接用的他的子类LinearLayoutManager
		    private RecyclerView recyclerView;
		    private RecyclerView.Adapter adapter;
		    private RecyclerView.LayoutManager layoutManager;
		//    数据list
		    private List<String> list;
		    @Override
		    protected void onCreate(Bundle savedInstanceState) {
		        requestWindowFeature(Window.FEATURE_NO_TITLE);
		        super.onCreate(savedInstanceState);
		        setContentView(R.layout.content_main);
		        //初始化数据
		        initData();
		        recyclerView = (RecyclerView) findViewById(R.id.listView);
		        layoutManager = new LinearLayoutManager(this);
		//        adpater需要重写三个方法,必须重新创建ViewHolder
		        adapter = new RecyclerView.Adapter() {
		            @Override
		            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
		                MyViewHolder viewHolder = new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_listview, parent, false));
		                return viewHolder;
		            }
		//用来更新item里的内容,不要用这里的position来做别的事情,比如onClick事件,你可以用getAdapterPosition来获取更新后的position
		            @Override
		            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
		                ((MyViewHolder) holder).textView.setText(list.get(position));
		            }
		            @Override
		            public int getItemCount() {
		                return list.size();
		            }
		//ViewHolder可以通过新建view填充或者从xml布局文件填充
		            class MyViewHolder extends RecyclerView.ViewHolder {
		                TextView textView;
	
		                public MyViewHolder(View itemView) {
		                    super(itemView);
		                    textView = (TextView) itemView.findViewById(R.id.textView);
		                }
		            }
		        };
		//        最后把adapter和layoutManager都设置好就可以了。
		        recyclerView.setAdapter(adapter);
		        recyclerView.setLayoutManager(layoutManager);
		    }
		
		    //初始化的方法
		    private void initData() {
		        list = new ArrayList<>();
		        for (int i = 0; i < 100; i++) {
		            list.add("id:" + i);
		        }
		    }
		}
		

这样感觉,虽然它比listView多了一个LayoutManager,但是它的adapter没有重写BaseAdapter那么麻烦,而且高度解耦,简洁明了。

最近文章

  • 美团日报
  • 美团日报
  • 美团日报
  • 美团日报
  • 美团日报

标签

  • Android
  • 服务器
  • 个人日记
  • Java
  • Andriod
  • 算法
  • Gaker
  • 转载
  • 技术博客

JackRyannn © 2015

Follow me
  • Github