安卓学习笔记_Day_06

RecyclerView的使用:

主活动的界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

</LinearLayout>

列表子项目的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_root"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/header"
        android:paddingLeft="10dp"
        android:layout_width="80dp"
        android:layout_height="80dp" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/name"
            android:paddingLeft="10dp"
            android:textSize="20dp"
            android:textColor="#2D72EB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
         <TextView
        android:id="@+id/desc"
        android:textSize="12dp"
        android:textColor="#DDBC58"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

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


public class Person {

    public String name;
    public String decs;
    public int id;

    Person(String name,String decs,int id){
       this.decs = decs;
       this.id = id;
       this.name = name;
    }
}

主活动:


public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private List<Person> personList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.recycler);

        //设置RecyclerView保持固定大小,这样可以优化RecyclerView的性能
        recyclerView.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        //设置RecyclerView的滚动方向
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        //为RecyclerView设置布局管理器
        recyclerView.setLayoutManager(linearLayoutManager);
        initData();
        RecyclerView.Adapter adapter = new RecyclerView.Adapter<PersonViewHolder>() {
            @NonNull

            //创建列表项组件的方法,使用该方法所创建的组件会被自动保存
            @Override
            public PersonViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item1,null);

                return new PersonViewHolder(view,this);
            }


            //为列表项组件绑定数据的方法,每次组件重新显示出来时都会重新执行该方法
            @Override
            public void onBindViewHolder(@NonNull PersonViewHolder viewHolder, int i) {

                viewHolder.nameTv.setText(personList.get(i).name);
                viewHolder.descTv.setText(personList.get(i).decs);
                viewHolder.headerTv.setImageResource(personList.get(i).id);
            }

            @Override
            public int getItemCount() {
                return personList.size();
            }
        };

        recyclerView.setAdapter(adapter);

    }

    private void initData(){
        String[] names = new String[]{
                "爬升 " ,"速度" ,"将我推向" ,"椅背","模糊的城市" ,"慢慢地" ,"飞出" ,"我的视线"};
        String[] decs = new String[]{
                "远离地面" ,"快接近三万英尺的距离" ,"思念像黏着身体的引力"
                        ,"还拉着泪不停地往下滴","逃开了你" ,"我躲在三万英尺的云底","每一次穿过乱流的突袭" , "紧紧地靠在椅背上的我"
        };

        int [] imagesIds = new int[]{
                R.drawable.w1,R.drawable.w2,R.drawable.w3,R.drawable.w4,
                R.drawable.w5,R.drawable.w6,R.drawable.w7,R.drawable.w8};
        for (int j = 0;j<names.length;j++){

            for (int i = 0;i<names.length;i++){
                this.personList.add(new Person(names[i],decs[i],imagesIds[i]));
            }
        }


    }

    class PersonViewHolder extends RecyclerView.ViewHolder{

        View rootView;
        TextView nameTv;
        TextView descTv;
        ImageView headerTv;
        private RecyclerView.Adapter adapter;

        public PersonViewHolder(@NonNull View itemView, final RecyclerView.Adapter adapter) {
            super(itemView);
            this.nameTv = itemView.findViewById(R.id.name);
            this.descTv = itemView.findViewById(R.id.desc);
            this.headerTv = itemView.findViewById(R.id.header);
            this.rootView = itemView.findViewById(R.id.item_root);
            this.adapter = adapter;
            
            //子项目的点击监听事件
            headerTv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this," 666", Toast.LENGTH_SHORT).show();
                }
            });
            rootView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int i = (int) (Math.random() * (personList.size() + 1));
                    Person person = new Person(personList.get(i).name,personList.get(i).decs,personList.get(i).id);
                    adapter.notifyItemInserted(2);
                    personList.add(2,person);
                    adapter.notifyItemRangeChanged(2,adapter.getItemCount());
                }
            });
            rootView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    int position = getAdapterPosition();
                   //通知RecyclerView执行动画
                    adapter.notifyItemRemoved(position);
                    //删除底层数据模型中的数据
                    MainActivity.this.personList.remove(position);
                    //通知RecyclerView执行实际的删除操作
                    adapter.notifyItemRangeRemoved(position,adapter.getItemCount());
                    return false;

                }
            });
        }
    }
}

猜你喜欢

转载自blog.csdn.net/luolaihua2018/article/details/89817264