[关闭]
@Allen-miss 2017-05-18T06:08:40.000000Z 字数 4236 阅读 509

RecyclerView的使用

Recyclerview

RecyclerView是ListView的升级版,不仅可以轻松实现Listview同样的效果,还优化了ListView中的各种不足;
打开build.gradle

  1. compile 'com.android.support:recyclerview-v7:25.3.1'
  1. main.xml
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:app="http://schemas.android.com/apk/res-auto"
  5. xmlns:tools="http://schemas.android.com/tools"
  6. android:layout_width="match_parent"
  7. android:orientation="vertical"
  8. android:layout_height="wrap_content">
  9. <android.support.v7.widget.RecyclerView
  10. android:id="@+id/recycler_view"
  11. android:layout_width="match_parent"
  12. android:layout_height="match_parent" />
  13. </LinearLayout>
  14. --------------------------------------------------------------------------------------------
  15. recyelerview_item.xml
  16. <?xml version="1.0" encoding="utf-8"?>
  17. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  18. android:layout_width="100dp"
  19. android:layout_height="wrap_content"
  20. android:orientation="vertical">
  21. <ImageView
  22. android:id="@+id/fruit_image"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content" />
  25. <TextView
  26. android:layout_marginTop="10dp"
  27. android:id="@+id/fruit_name"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content" />
  30. </LinearLayout>

布局文件其实都跟我们的ListView的文件差不多,重要的是适配器,以及它的拓展性强,下面来看我们的Java代码

  1. public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder>{
  2. private List<Fruit> mFruitList;
  3. static class ViewHolder extends RecyclerView.ViewHolder {
  4. View fruitView;
  5. ImageView fruitImage;
  6. TextView fruitName;
  7. public ViewHolder(View view) {
  8. super(view);
  9. fruitView = view;
  10. fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
  11. fruitName = (TextView) view.findViewById(R.id.fruit_name);
  12. }
  13. }
  14. public FruitAdapter(List<Fruit> fruitList){
  15. mFruitList = fruitList;
  16. }
  17. @Override
  18. public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  19. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item,parent,false);
  20. final RecyclerView.ViewHolder holder = new ViewHolder(view);
  21. return (ViewHolder) holder;
  22. }
  23. @Override
  24. public void onBindViewHolder(final ViewHolder holder, int position) {
  25. final Fruit fruit = mFruitList.get(position);
  26. holder.fruitImage.setImageResource(fruit.getImageId());
  27. holder.fruitName.setText(fruit.getName());
  28. holder.fruitView.setOnClickListener(new View.OnClickListener() {
  29. @Override
  30. public void onClick(View v) {
  31. int position = holder.getAdapterPosition();
  32. Fruit fruit1 = mFruitList.get(position);
  33. Toast.makeText(v.getContext(),"you click view"+fruit.getName(),Toast.LENGTH_SHORT).show();
  34. }
  35. });
  36. holder.fruitImage.setOnClickListener(new View.OnClickListener() {
  37. @Override
  38. public void onClick(View v) {
  39. int position = holder.getAdapterPosition();
  40. Fruit fruit1 = mFruitList.get(position);
  41. Toast.makeText(v.getContext(),"you click view"+fruit.getName(),Toast.LENGTH_SHORT).show();
  42. }
  43. });
  44. }
  45. @Override
  46. public int getItemCount() {
  47. return mFruitList.size();
  48. }
  49. }

你们可能会说这那里简单,比我们的ListView的代码多多了。但是仔细看,你会发现它的代码逻辑通俗易懂。

  1. MainActivity.java
  2. public class MainActivity extends AppCompatActivity {
  3. private List<Fruit> fruitList = new ArrayList<>();
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. initFruit();
  9. RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
  10. LinearLayoutManager layoutManager = new LinearLayoutManager(this);
  11. //设置RecyclerView的滑动方向
  12. layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
  13. recyclerView.setLayoutManager(layoutManager);
  14. FruitAdapter adapter = new FruitAdapter(fruitList);
  15. recyclerView.setAdapter(adapter);
  16. }
  17. private void initFruit() {
  18. Fruit fruit1 = new Fruit("1",R.mipmap.ic_launcher);
  19. Fruit fruit2 = new Fruit("2",R.mipmap.ic_launcher);
  20. Fruit fruit3 = new Fruit("3",R.mipmap.ic_launcher);
  21. Fruit fruit4 = new Fruit("4",R.mipmap.ic_launcher);
  22. Fruit fruit5 = new Fruit("5",R.mipmap.ic_launcher);
  23. Fruit fruit6 = new Fruit("6",R.mipmap.ic_launcher);
  24. Fruit fruit7 = new Fruit("7",R.mipmap.ic_launcher);
  25. Fruit fruit8 = new Fruit("9",R.mipmap.ic_launcher);
  26. fruitList.add(fruit1);
  27. fruitList.add(fruit2);
  28. fruitList.add(fruit3);
  29. fruitList.add(fruit4);
  30. fruitList.add(fruit5);
  31. fruitList.add(fruit6);
  32. fruitList.add(fruit7);
  33. fruitList.add(fruit8);
  34. }


细心的你可能发现
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
跟我们的ListView的中的差别很大
这就是RecyclerView的神奇之处,它能根据我们的需要,来横向滑动或者纵向活动;
还可以设置成GridView的模式,是不是很神奇。
下次再具体讲讲,RecyclerView设置成Gridview

源码下载

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注