软件发布| 专题库| 优优资讯| 苹果专区| 安卓专区| 软件下载| 首页
优优资讯 电脑教程 安卓教程 安卓攻略 苹果教程 苹果攻略 新闻资讯

ListView的新朋友——RecyclerView初识

时间:2015-07-22 来源:本站整理 我要评论

  关注RecyclerView也有一段时间了,由于种种原因一直没有自己亲自动手实践一下,现在首先向大家介绍一下RecyclerView,作为替代ListView使RecyclerView标准化了ViewHolder,ListView中convertView是复用的。
 
  以前我们是自己写ViewHolder,Google这次将其标准化,在RecyclerView中,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder中,也就是说,假设没有屏幕显示10个条目,则会创建10个ViewHolder缓存起来,每次复用的是ViewHolder,所以他把getView这个方法变为了onCreateViewHolder。
 
  总之,RecyclerView比listview更简洁了,ViewHolder更适合多种子布局的列表(现在的项目貌似都有多种子的item,比如listview中间加广告之类的)。RecyclerView不提供setOnItemClickListener方法,你可以在ViewHolder中添加事件。总之,RecyclerView比listview更简洁了。
 
  RecyclerView可以实现横向、纵向滑动视图
 
ListView的新朋友——RecyclerView初识
 
  使用RecyclerView,必须使用指定一个adapter、定义一个布局管理器。创建adapter必须继承自RecyclerView.Adapter。实施的细节需要看数据类型和需要的视图。
 
ListView的新朋友——RecyclerView初识
  RecyclerView widget
 
  RecyclerView 提供了 LayoutManager,RecylerView 不负责子 View 的布局,我们可以自定义 LayoutManager 来实现不同的布局效果,目前只提供了LinearLayoutManager。 LinearLayoutManager 可以指定方向,默认是垂直, 可以设置成水平。
 
  注意: 必须为RecyclerView 设置LayoutManager,否则回报空指针异常
 
  代码中使用RecyclerView
 
  -------------------------------------------------
 
  首先 添加  android-support-v7-recyclerview.jar
 
  xml布局
 
  <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" >
  <android.support.v7.widget.RecyclerView
  android:id="@+id/recyclerView"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:scrollbars="vertical" />
  </RelativeLayout>
 
  MainActivity.java
 
  package com.zyh.testrecyclerview;
  import java.util.ArrayList;
  import java.util.List;
  import android.app.Activity;
  import android.os.Bundle;
  import android.support.v7.widget.LinearLayoutManager;
  import android.support.v7.widget.RecyclerView;
  public class MainActivity extends Activity {
  private RecyclerView    mRecyclerView;
  private MyRecycleAdapter    adapter;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initView();
  initData();
  }
  private void initView() {
  mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
  }
  private void initData() {
  //初始化数据
  List<String> list = new ArrayList<String>();
  for(int i=0;i<100;i++){
  list.add("我是测试条目:"+i);
  }
  //设置LayoutManager
  LinearLayoutManager layoutManager = new LinearLayoutManager(this);
  //      layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); //水平方向listview
  mRecyclerView.setLayoutManager(layoutManager );
  //创建Adapter
  adapter  = new MyRecycleAdapter(list);
  mRecyclerView.setAdapter(adapter);
  }
  }
 
  MyRecycleAdapter.java
 
  package com.zyh.testrecyclerview;
  import java.util.List;
  import android.support.v7.widget.RecyclerView;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.TextView;
  public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapter.ViewHolder> {
  private List<String>  list;
  public MyRecycleAdapter(List<String> list) {
  this.list = list;
  }
  @Override
  public int getItemCount() {
  return list.size();
  }
  @Override
  public void onBindViewHolder(ViewHolder holder, int position) {
  holder.mTextView.setText(list.get(position));
  }
  @Override
  public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
  // 创建一个View,简单起见直接使用系统提供的布局,就是一个TextView
  View view = View.inflate(viewGroup.getContext(), android.R.layout.simple_list_item_1, null);
  // 创建一个ViewHolder
  ViewHolder holder = new ViewHolder(view);
  return holder;
  }
  public static class ViewHolder extends RecyclerView.ViewHolder {
  public TextView mTextView;
  public ViewHolder(View itemView) {
  super(itemView);
  mTextView = (TextView) itemView;
  }
  }
  }
 

用户评论

(已有0条评论)
表情
注:您的评论需要经过审核才能显示哦,请文明发言!
还没有评论,快来抢沙发吧!
快速检索
0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z