recyclerview + 上拉加载下拉刷新 todo事件效果

上拉加载 下拉刷新 item点击事件 add添加item remove删除item效果练习实现

在这里插入图片描述

导入依赖

  implementation 'androidx.recyclerview:recyclerview:1.2.1'
  implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'

activity_first.xml

   <!--Swipe Refresh Layout -->
    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="413dp"
            android:layout_height="634dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent" />
    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

    <Button
        android:id="@+id/btn_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="add"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_remove"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:text="remove"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

FirstActivity.java

/**
 *@author gestwr
 * recyclerview + 上拉加载下拉刷新 todo清单事件
 */
public class FirstActivity extends AppCompatActivity {
    
    

    RecyclerView mRecyclerView;
    MyAdapter mMyAdapter;
    List<ItemRecyclerview> mList = new ArrayList<>();
    int maxInitValue = 10;
    int itemNum = 100;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        mRecyclerView = findViewById(R.id.recyclerview);

        initList(0);
        mMyAdapter = new MyAdapter();
        mRecyclerView.setAdapter(mMyAdapter);
        LinearLayoutManager layoutManager = new LinearLayoutManager(FirstActivity.this);
        mRecyclerView.setLayoutManager(layoutManager);

        //分隔线
        DividerItemDecoration mDivider = new
                DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        mRecyclerView.addItemDecoration(mDivider);

        //swipe Refresh Layout 下拉刷新
        SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refreshLayout);
        swipeRefreshLayout.setColorSchemeResources(R.color.blue);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    
    
            @Override
            public void onRefresh() {
    
    
                //数据更新
                Toast.makeText(FirstActivity.this, "下拉刷新一次", Toast.LENGTH_SHORT).show();
                swipeRefreshLayout.setRefreshing(false);
            }
        });
        
        //上拉加载,设置滑动监听器,RecyclerView自带的ScrollListener
        mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    
    
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
    
    
                super.onScrollStateChanged(recyclerView, newState);

                //获取最后一个可见的Item的position
                int lastPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition();

                //Log.d("FirstActivity", "onScrollStateChanged: "+ lastPosition);

                if (maxInitValue == lastPosition+1) {
    
    
                    //这里控制 加载更多
                    Toast.makeText(FirstActivity.this, "稍等,加载更多", Toast.LENGTH_SHORT).show();
                    initList(5);
                }
            }
        });

        buttonClick();

    }

    private void buttonClick() {
    
    
        Button btnAdd = findViewById(R.id.btn_add);
        btnAdd.setOnClickListener(new View.OnClickListener() {
    
    
            @SuppressLint("NotifyDataSetChanged")
            @Override
            public void onClick(View view) {
    
    
                ItemRecyclerview item = new ItemRecyclerview();

                item.title = "标题 新标题" + itemNum;
                item.content = "内容 新内容";
                mList.add(0, item);
                mMyAdapter.notifyItemInserted(0);
                mMyAdapter.notifyDataSetChanged();
                itemNum++;
            }
        });
        Button btnRemove = findViewById(R.id.btn_remove);
        btnRemove.setOnClickListener(new View.OnClickListener() {
    
    
            @SuppressLint("NotifyDataSetChanged")
            @Override
            public void onClick(View view) {
    
    
                mList.remove(0);
                mMyAdapter.notifyItemRangeRemoved(0, 1);
                //顶部添加了新item 但视角没有回到顶部 -> 数据刷新
                mMyAdapter.notifyDataSetChanged();
            }
        });
    }


    private void initList(int loadValue) {
    
    
        if (loadValue < 0) {
    
    
            Toast.makeText(FirstActivity.this, "没有更多数据了", Toast.LENGTH_SHORT).show();
        }

        if (loadValue == 0) {
    
    
            mList.clear();
            // 构造初始数据
            for (int i = 0; i < maxInitValue; i++) {
    
    
                ItemRecyclerview item = new ItemRecyclerview();
                item.title = "标题" + (i + 1);
                item.content = "内容" + (i + 1);
                mList.add(item);
            }
        } else {
    
    
            loadValue += maxInitValue;
            for (int i = maxInitValue; i < loadValue; i++) {
    
    
                ItemRecyclerview item = new ItemRecyclerview();
                item.title = "标题" + (i + 1);
                item.content = "内容" + (i + 1);
                mList.add(item);
                mMyAdapter.notifyItemInserted(i);
                mMyAdapter.notifyDataSetChanged();
            }
            maxInitValue = loadValue;
        }

    }


    class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    
    

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    
            View view = View.inflate(FirstActivity.this, R.layout.item_list, null);
            return new MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) {
    
    
//            Log.d("FirstActivity", "onBindViewHolder: "+position);
            ItemRecyclerview recyclerview = mList.get(position);
            holder.mTitleTv.setText(recyclerview.title);
            holder.mTitleContent.setText(recyclerview.content);

            //Item 点击事件
            holder.mRootView.setOnClickListener(new View.OnClickListener() {
    
    
                @Override
                public void onClick(View view) {
    
    
                    Toast.makeText(FirstActivity.this, "点击了" + position, Toast.LENGTH_SHORT).show();
                }
            });

        }

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

    class MyViewHolder extends RecyclerView.ViewHolder {
    
    
        TextView mTitleTv;
        TextView mTitleContent;
        ConstraintLayout mRootView;

        public MyViewHolder(@NonNull View itemView) {
    
    
            super(itemView);
            mTitleTv = itemView.findViewById(R.id.textView);
            mTitleContent = itemView.findViewById(R.id.textView2);
            mRootView = itemView.findViewById(R.id.rootView);
        }
    }

}

猜你喜欢

转载自blog.csdn.net/qq_44256828/article/details/126307898