原理
RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。用户滑动屏幕切换视图时,上一个视图会回收利用,RecyclerView所做的就是回收再利用,循环往复。
一、涉及类
ViewHolder:容纳父类视图 Adapter:创建ViewHolder和将模型层的数据绑定到ViewHolder上。 LayoutManager:摆放列表项 && 定义屏幕滚动
二、Adaptor--RecyclerViewAdapter
@NonNull
@Override
//创建容纳item的viewHolder容器
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
//数据绑定
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ListItem listItem = listItems.get(position);
holder.imageView.setImageResource(listItem.getImgId());
holder.textView.setText(listItem.getName());
}
@Override
//获取list数量
public int getItemCount() {
return listItems.size();
}
// List内部控件放在viewHolder
static class ViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
TextView textView;
public ViewHolder(View view){
super(view);
imageView = view.findViewById(R.id.imageItem);
textView = view.findViewById(R.id.textItem);
}
}
三、Activity中设置LayoutManager和adaptor
public class SevenActivity extends AppCompatActivity {
private List<ListItem> listItems = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seven);
initItem();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
//LayoutManager:摆放列表项 && 定义屏幕滚动
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
//adpator:创建ViewHolder和将模型层的列表数据(listItems)绑定到ViewHolder上。
RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(listItems);
recyclerView.setAdapter(recyclerViewAdapter);
}
//初始化
private void initItem(){
for(int i=0;i<8;i++){
ListItem item1 = new ListItem("Android",R.drawable.ic_launcher);
listItems.add(item1);
ListItem item2 = new ListItem("java",R.drawable.ic_launcher);
listItems.add(item2);
ListItem item3 = new ListItem("ios",R.drawable.ic_launcher);
listItems.add(item3);
ListItem item4 = new ListItem("eclipse",R.drawable.ic_launcher);
listItems.add(item4);
}
}
}