- 先导入依赖
implementation ‘com.android.support:recyclerview-v7:28.0.0’
api(‘com.jcodecraeer:xrecyclerview:1.5.9’) {
exclude group: ‘com.android.support’
}
此适配器方法可以更好的实现删除添加数据的效果
适配器代码如下:
package com.example.day01;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.PrecomputedText;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
Context context;
ArrayList<String> datas;
MyOnClick myOnClick;
public MyAdapter(Context context, ArrayList<String> datas) {
this.context = context;
this.datas = datas;
}
/**
* 设置接口
* @param myOnClick
*/
public void setMyOnClick(MyOnClick myOnClick){
this.myOnClick = myOnClick;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new MyHolder(LayoutInflater.from(context).inflate(R.layout.item_me,viewGroup,false));
}
@Override
public void onBindViewHolder(@NonNull final MyHolder myHolder, final int i) {
myHolder.tv.setText(datas.get(i));//给控件设置数据源
//(数据类型)(最小值+Math.random()*(最大值-最小值+1))随机数
int rundom = (int)(100+Math.random()*(800-400+1));
Log.e("rundom###",""+rundom);
//设置高度
ViewGroup.LayoutParams params = myHolder.tv.getLayoutParams();
params.height = rundom;
myHolder.tv.setLayoutParams(params);
myHolder.tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myOnClick.myItemClick(i);
}
});
myHolder.tv.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
myOnClick.myLongClick(i);
return true;
}
});
}
@Override
public int getItemCount() {
return datas.size();
}
public class MyHolder extends RecyclerView.ViewHolder{
private TextView tv;
public MyHolder(@NonNull View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
}
}
}
主类代码:
package com.example.day01;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.widget.LinearLayout;
import java.util.ArrayList;
public class day01 extends AppCompatActivity {
RecyclerView recyc;
ArrayList<String> datas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_day01);
//找控件
recyc = findViewById(R.id.recyc);
//ListView布局方式
// LinearLayoutManager manager = new LinearLayoutManager(this);
// manager.setOrientation(LinearLayout.VERTICAL);//设置布局方向
//Grild的样式
// GridLayoutManager manager = new GridLayoutManager(this,1,GridLayoutManager.HORIZONTAL,false);
StaggeredGridLayoutManager manager1 = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
recyc.setLayoutManager(manager1);
//第一个参数上下文 第二个参数显示方向
DividerItemDecoration decoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
// recyc.addItemDecoration(decoration);//设置给控件
//设置Item的边框颜色
Drawable drawable = getResources().getDrawable(R.drawable.my_tem);
decoration.setDrawable(drawable);
recyc.addItemDecoration(decoration);
DefaultItemAnimator animator = new DefaultItemAnimator();
animator.setRemoveDuration(200);
animator.setAddDuration(200);
recyc.setItemAnimator(animator);//设置动画
initdata();
final MyAdapter adapter = new MyAdapter(this,datas);
recyc.setAdapter(adapter);
adapter.setMyOnClick(new MyOnClick() {
@Override
public void myItemClick(int i) {
datas.remove(i);//删除数据
adapter.notifyItemRemoved(i);
//删除后更新下标
adapter.notifyItemRangeChanged(0,datas.size());
}
@Override
public void myLongClick(int i) {
//长按加数据
ArrayList<String> newstr = new ArrayList<>();
newstr.add("zzz");
newstr.add("aaa");
newstr.add("sss");
datas.addAll(newstr);
adapter.notifyItemInserted(0);
adapter.notifyDataSetChanged();//更新适配器
}
});
}
//数据初始化
public void initdata(){
datas = new ArrayList<>();
for(int i = 97;i <= 122;i++){
char a = (char)i;
datas.add(a+"");
}
}
}