码迷,mamicode.com
首页 > 其他好文 > 详细

RecyccleView 详解

时间:2015-01-26 10:17:28      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:recycleview

在谷歌的官网我们可以看到它是这样介绍的: RecyclerView  is a more advanced and flexible version of  ListView . This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the  RecyclerView  widget when you have lists with elements that change dynamically.

RecyclerView比listview更先进更灵活,对于很多的视图它就是一个容器,可以有效的重用和滚动。当数据动态变化的时候请使用它。

RecyclerView  is easy to use, because it provides:

  • A layout manager for positioning items
  • Default animations for common item operations
  • You also have the flexibility to define custom layout managers and animations for this widget.

RecyclerView使用起来很方便因为它提供:

它为item的定位提供一个layoutmanager

为item的操作提供一个缺省的animations

您还可以灵活地定义这个小部件的自定义布局管理器和动画

To use the  RecyclerView  widget, you have to specify an adapter and a layout manager. To create an adapter, you extend the  RecyclerView.Adapter  class. The details of the implementation depend on the specifics of your dataset and the type of views. For more information, see the  examples

 below.

为了使用RecyclerVIew,你必须指定一个adapter和一个layoutmanager,为了创建一个adapter,你必须得继承RecyclerView.Adapter,详细的实现方法取决与你的数据集和你视图的类型。

Demo介绍不同于官网

这里就介绍完了下面我们就要做自己的Demo了。如果需要看官网的Demo那么请打开这里: 官方Demo

这里既然是详解那么就要与官方的Demo有不同,好了看看我们要做的效果吧。技术分享

实现图片文字按钮的混排。

首先还是看我的工程结构吧。技术分享

首先还是贴出我的main_acitivy.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

 <!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
  android:id="@+id/my_recycler_view"
  android:scrollbars="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>
</LinearLayout>

其他几个xml就不用贴了,很简单的放了写TextVIew,ImgeView之类。

然后我们就来看看代码,首先是Bean里面的代码。

package com.androidl.bob;

/**
 * 实体包
 * 
 * @author edsheng
 * 
 */
public class Bean {
  public static final int Y_TYPE = 0; //view类型0
  public static final int X_TYPE = 1; //view类型2
  public static final int Z_TYPE = 2;//view 类型3
  private int type;
  private String text;

  public Bean(int type, String text) {
    super();
    this.type = type;
    this.text = text;
  }

  public int getType() {
    return type;
  }

  public void setType(int type) {
    this.type = type;
  }

  public String getText() {
    return text;
  }

  public void setText(String text) {
    this.text = text;
  }

}

然后是Adapter里面的代码:

package com.androidl.bob;

import java.util.List;

import com.example.androidl.R;

import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


public class RecycleAdapter extends RecyclerView.Adapter<ViewHolder> {

  private List<Bean> beans;

  public RecycleAdapter(List<Bean> beans) {
    super();
    this.beans = beans;
  }

  /**
   * 内部TextHoler
   * 
   * 
   * 
   */
  public class TextHoler extends RecyclerView.ViewHolder {
    public TextView textView;

    public TextHoler(View textview) {
      super(textview);
      this.textView = (TextView) textview.findViewById(R.id.mytext);
    }
  }

  /**
   * iamgeHolder
   * 
   * @author edsheng
   * 
   */
  public class ImageHoler extends RecyclerView.ViewHolder {
    public ImageView Imageview;

    public ImageHoler(View textview) {
      super(textview);
      this.Imageview = (ImageView) textview.findViewById(R.id.myiamge);
    }
  }

  /**
   * 按钮的holder
   * 
   * 
   * 
   */
  public class ButtonHolder extends RecyclerView.ViewHolder {
    public Button button;

    public ButtonHolder(View textview) {
      super(textview);
      this.button = (Button) textview.findViewById(R.id.mybutton);
    }
  }

  @Override
  public int getItemCount() {
    // TODO Auto-generated method stub
    return beans.size();
  }

  /**
   * 获取消息的类型
   */
  @Override
  public int getItemViewType(int position) {
    // TODO Auto-generated method stub
    return beans.get(position).getType();
  }

  /**
   * 创建VIewHolder
   */
  @Override
  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewtype) {
    // TODO Auto-generated method stub
    View v = null;
    ViewHolder holer = null;
    switch (viewtype) {
    case Bean.X_TYPE:
      v = LayoutInflater.from(parent.getContext()).inflate(
          R.layout.recylce_item_x, null);
      holer = new TextHoler(v);
      break;
    case Bean.Y_TYPE:
      v = LayoutInflater.from(parent.getContext()).inflate(
          R.layout.recylce_item_y, null);
      holer = new ButtonHolder(v);
      break;
    case Bean.Z_TYPE:
      v = LayoutInflater.from(parent.getContext()).inflate(
          R.layout.recylce_item_z, null);
      holer = new ImageHoler(v);
      break;
    }

    return holer;
  }

  /**
   * 绑定viewholder
   */
  @Override
  public void onBindViewHolder(ViewHolder holder, int position) {
    // TODO Auto-generated method stub
    switch (getItemViewType(position)) {
    case Bean.X_TYPE:
      TextHoler textholer = (TextHoler) holder;
      textholer.textView.setText(beans.get(position).getText());
      break;
    case Bean.Y_TYPE:
      ButtonHolder buttonHolder = (ButtonHolder) holder;
      buttonHolder.button.setText(beans.get(position).getText());
      break;
    case Bean.Z_TYPE:
      ImageHoler imageHoler = (ImageHoler) holder;
      // imageHoler.Imageview.setImageResource(android.R.drawable.checkbox_on_background);
      break;
    }
  }
}

最后是activity的代码。

package com.androidl.bob;

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;

import com.example.androidl.R;

public class Mainactivity extends Activity {
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
     RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

//		// improve performance if you know that changes in content
//		// do not change the size of the RecyclerView
//		 mRecyclerView.setHasFixedSize(true);

     //创建布局管理器
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    mRecyclerView.setLayoutManager(mLayoutManager);

    //初始化数据
    List<Bean> myDataset = new ArrayList<Bean>();

    myDataset.add(new Bean(Bean.Z_TYPE, "图片"));
    myDataset.add(new Bean(Bean.X_TYPE, "文字"));
    myDataset.add(new Bean(Bean.Y_TYPE, "按钮"));
    myDataset.add(new Bean(Bean.Z_TYPE, "图片"));
    myDataset.add(new Bean(Bean.X_TYPE, "shit"));
    myDataset.add(new Bean(Bean.X_TYPE, "我擦"));
    myDataset.add(new Bean(Bean.Z_TYPE, "图片"));
    myDataset.add(new Bean(Bean.Y_TYPE, "按钮"));
    myDataset.add(new Bean(Bean.Y_TYPE, "按钮"));
    myDataset.add(new Bean(Bean.X_TYPE, "文字"));
    //创建Adapter
    RecycleAdapter mAdapter = new RecycleAdapter(myDataset);
    mRecyclerView.setAdapter(mAdapter);

  }

RecyccleView 详解

标签:recycleview

原文地址:http://blog.csdn.net/fangchao3652/article/details/43148871

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!