安卓学习笔记_Day_06

不念不忘少年蓝@ 2022-02-05 04:11 341阅读 0赞

RecyclerView的使用:

主活动的界面:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity">
  8. <android.support.v7.widget.RecyclerView
  9. android:id="@+id/recycler"
  10. android:layout_marginLeft="8dp"
  11. android:layout_marginRight="8dp"
  12. android:layout_width="match_parent"
  13. android:layout_height="match_parent">
  14. </android.support.v7.widget.RecyclerView>
  15. </LinearLayout>

列表子项目的xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/item_root"
  4. android:orientation="horizontal"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content">
  7. <ImageView
  8. android:id="@+id/header"
  9. android:paddingLeft="10dp"
  10. android:layout_width="80dp"
  11. android:layout_height="80dp" />
  12. <LinearLayout
  13. android:orientation="vertical"
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content">
  16. <TextView
  17. android:id="@+id/name"
  18. android:paddingLeft="10dp"
  19. android:textSize="20dp"
  20. android:textColor="#2D72EB"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content" />
  23. <TextView
  24. android:id="@+id/desc"
  25. android:textSize="12dp"
  26. android:textColor="#DDBC58"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content" />
  29. </LinearLayout>
  30. </LinearLayout>

为列表子项目创建的属性类:

  1. public class Person {
  2. public String name;
  3. public String decs;
  4. public int id;
  5. Person(String name,String decs,int id){
  6. this.decs = decs;
  7. this.id = id;
  8. this.name = name;
  9. }
  10. }

主活动:

  1. public class MainActivity extends AppCompatActivity {
  2. private RecyclerView recyclerView;
  3. private List<Person> personList = new ArrayList<>();
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. recyclerView = findViewById(R.id.recycler);
  9. //设置RecyclerView保持固定大小,这样可以优化RecyclerView的性能
  10. recyclerView.setHasFixedSize(true);
  11. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
  12. //设置RecyclerView的滚动方向
  13. linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  14. //为RecyclerView设置布局管理器
  15. recyclerView.setLayoutManager(linearLayoutManager);
  16. initData();
  17. RecyclerView.Adapter adapter = new RecyclerView.Adapter<PersonViewHolder>() {
  18. @NonNull
  19. //创建列表项组件的方法,使用该方法所创建的组件会被自动保存
  20. @Override
  21. public PersonViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  22. View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item1,null);
  23. return new PersonViewHolder(view,this);
  24. }
  25. //为列表项组件绑定数据的方法,每次组件重新显示出来时都会重新执行该方法
  26. @Override
  27. public void onBindViewHolder(@NonNull PersonViewHolder viewHolder, int i) {
  28. viewHolder.nameTv.setText(personList.get(i).name);
  29. viewHolder.descTv.setText(personList.get(i).decs);
  30. viewHolder.headerTv.setImageResource(personList.get(i).id);
  31. }
  32. @Override
  33. public int getItemCount() {
  34. return personList.size();
  35. }
  36. };
  37. recyclerView.setAdapter(adapter);
  38. }
  39. private void initData(){
  40. String[] names = new String[]{
  41. "爬升 " ,"速度" ,"将我推向" ,"椅背","模糊的城市" ,"慢慢地" ,"飞出" ,"我的视线"};
  42. String[] decs = new String[]{
  43. "远离地面" ,"快接近三万英尺的距离" ,"思念像黏着身体的引力"
  44. ,"还拉着泪不停地往下滴","逃开了你" ,"我躲在三万英尺的云底","每一次穿过乱流的突袭" , "紧紧地靠在椅背上的我"
  45. };
  46. int [] imagesIds = new int[]{
  47. R.drawable.w1,R.drawable.w2,R.drawable.w3,R.drawable.w4,
  48. R.drawable.w5,R.drawable.w6,R.drawable.w7,R.drawable.w8};
  49. for (int j = 0;j<names.length;j++){
  50. for (int i = 0;i<names.length;i++){
  51. this.personList.add(new Person(names[i],decs[i],imagesIds[i]));
  52. }
  53. }
  54. }
  55. class PersonViewHolder extends RecyclerView.ViewHolder{
  56. View rootView;
  57. TextView nameTv;
  58. TextView descTv;
  59. ImageView headerTv;
  60. private RecyclerView.Adapter adapter;
  61. public PersonViewHolder(@NonNull View itemView, final RecyclerView.Adapter adapter) {
  62. super(itemView);
  63. this.nameTv = itemView.findViewById(R.id.name);
  64. this.descTv = itemView.findViewById(R.id.desc);
  65. this.headerTv = itemView.findViewById(R.id.header);
  66. this.rootView = itemView.findViewById(R.id.item_root);
  67. this.adapter = adapter;
  68. //子项目的点击监听事件
  69. headerTv.setOnClickListener(new View.OnClickListener() {
  70. @Override
  71. public void onClick(View v) {
  72. Toast.makeText(MainActivity.this," 666", Toast.LENGTH_SHORT).show();
  73. }
  74. });
  75. rootView.setOnClickListener(new View.OnClickListener() {
  76. @Override
  77. public void onClick(View v) {
  78. int i = (int) (Math.random() * (personList.size() + 1));
  79. Person person = new Person(personList.get(i).name,personList.get(i).decs,personList.get(i).id);
  80. adapter.notifyItemInserted(2);
  81. personList.add(2,person);
  82. adapter.notifyItemRangeChanged(2,adapter.getItemCount());
  83. }
  84. });
  85. rootView.setOnLongClickListener(new View.OnLongClickListener() {
  86. @Override
  87. public boolean onLongClick(View v) {
  88. int position = getAdapterPosition();
  89. //通知RecyclerView执行动画
  90. adapter.notifyItemRemoved(position);
  91. //删除底层数据模型中的数据
  92. MainActivity.this.personList.remove(position);
  93. //通知RecyclerView执行实际的删除操作
  94. adapter.notifyItemRangeRemoved(position,adapter.getItemCount());
  95. return false;
  96. }
  97. });
  98. }
  99. }
  100. }

发表评论

表情:
评论列表 (有 0 条评论,341人围观)

还没有评论,来说两句吧...

相关阅读