1.首先在build.gradle中添加依赖库
compile 'com.android.support:recyclerview-v7:24.2.1'
2.修改activity_main.xml
<LinearLayout ......<android.support.v7.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="maych_parent"android:layout_height="match_parent" /> </LinearLayout>
3.类似ListView,新建一个适配器FruitAdapter,定义一个ViewHolder内部类,传入一个View参数,重写onCreateViewHolder()、onBindViewHolder()、getItemCount()
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder>{private List<Fruit> mFruitList;static class ViewHolder extends RecyclerView.ViewHolder{ImageView Fruitimage;TextView FruitName;
//创建ViewHolder内部类public ViewHolder(View view){super(view);fruitImage = (ImageView)findViewById(R.id.fruit_image);fruitName = (TextView)findViewById(R.id.fruit_name);}}public FruitAdapter(List<Fruit> fruitList){mFruitList = fruitList;}
//创建ViewHolder实例@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);ViewHolder holder = new ViewHolder(view);return holder;}
//为子项赋值@Overridepublic void onBindViewHolder(ViewHolder holder,int position){Fruit fruit = mFruitList.get(position);holder.fruitImage.setImageResource(fruit.getImageId());holder.fruitName.setText(fruit.getName());}
//子项的数目@Overridepublic int getItemCount(){return mFruitList.size();} }
4.在MainAcitivity中编写RecyclerView代码
public class MainActivity extends AppCompatActivity{private Lsit<Fruit> fruitList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initFruits(); //初始化水果数据RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view);LinearLayoutManager layoutManager = new LinearLayoutManager(this);recyclerView.setLayoutManager(layoutManager); //指定布局方式FruitAdapter adapter = new FruitAdapter(fruitList);recyclerView.setAdapter(adapter);}private void initFruits(){for(int i=0;i<2;i++){Fruit apple = new Fruit("Apple",R.drawable.apple_pic);fruitList.add(apple);......}} }
RecyclerView特殊用法
ListView只能实现纵向滚动,而RecyclerView可以实现横向和瀑布流。
横向滚动:
修改fruit_item.xml中LinearLayout布局方向:android:orientation="vartical"; 并将ImageView和TextView设置成水平居中。
在MainActivity中onCreate()添加:layoutManager.setOrientation(LinearLayoutManger.HORIZONTAL);
瀑布流:
调整fruit_item.xml
在MainActivity中onCreate()添加:staggeredGridLayoutManager layoutManager = staggeredGridLayoutManager(3,StaggeredGridLayoutManger.VERTICAL); //1参:列数,2参:排列方向
RecyclerView的点击事件
......@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);final ViewHolder holder = new ViewHolder(view);holder.fruitView.setOnClickListener(new View.onClickListener(){@Overridepublic void onClick(View v){int position = holder.getAdapterPosition();Fruit fruit = mFruitList.get(position);Toast.makeText(v.getContext(),"you clicked view"+fruit.getName(),Toast.LENGTH_SHORT).show();}});holder.fruitImage.setOnClickListener(new View.onClickListener(){@Overridepublic void onClick(View v){int position = holder.getAdapterPosition();Fruit fruit = mFuritList.get(position);Toast.makeText(v.getContext(),"you clicked image"+fruit.getName(),Toast.LENGTH_SHORT).show();}});return holder;} ......