上拉加载 下拉刷新 item点击事件 add添加item remove删除item效果练习实现
导入依赖
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
activity_first.xml
<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
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);
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);
}
});
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
int lastPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition();
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);
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) {
ItemRecyclerview recyclerview = mList.get(position);
holder.mTitleTv.setText(recyclerview.title);
holder.mTitleContent.setText(recyclerview.content);
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);
}
}
}