RecyclerView 是新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。
效果图:
第一步:添加依赖
implementation 'com.android.support:recyclerview-v7:28.0.0'
布局省略
直接用
private RecyclerView recyclerView;//主体
private List<String> list;//自拟数据
private RecyclerAdapter recyclerAdapter;//适配器
/**
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycle);
initView();
initData();
initRecycle();
}
private void initRecycle() {
//配置layoutmanger
// 横向 纵向 各种花式布局
LinearLayoutManager layoutManager=new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);//设置方向
recyclerView.setLayoutManager(layoutManager);
//初始化适配器
recyclerAdapter=new RecyclerAdapter(this,list);
//配置adapter
recyclerView.setAdapter(recyclerAdapter);
//添加android自带的分割线
//recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
//自定义分割线并添加
DividerItemDecoration decoration=new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
decoration.setDrawable(ContextCompat.getDrawable(this,R.drawable.divied));
recyclerView.addItemDecoration(decoration);
//刷新适配器
recyclerAdapter.notifyDataSetChanged();
}
private void initData() {
list=new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add("山明和水秀比你更有看头"+i);
}
}
private void initView() {
recyclerView=findViewById(R.id.recyclerview);
}
适配器部分
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyHolder> {
private Context context;
private List<String> list;
public RecyclerAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
/**
* 这个viewholder是用来初始化控件的
*/
class MyHolder extends RecyclerView.ViewHolder{
TextView textView;
public MyHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.text);
}
}
/**
* @param viewGroup
* @return 这个方法是用来创建viewholder的
* 引入xml传送给viewholder
*/
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycle_item,viewGroup,false);
MyHolder myHolder=new MyHolder(view);
return myHolder;
}
/**
* @param myHolder
* @param *这里是操作item的,绑定到视图
*/
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, final int position) {
String s=list.get(position);
myHolder.textView.setText(s);
//对控件进行监听
myHolder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
myHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,list.get(position),Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
}