RecyclerView是Android support v7里面是一个自定义控件。用来显示大量数据集合。类似ListView和GridView这两个控件,RecyclerView同样可以实现,甚至更好。
以前我们在实现ListView和GridView的时候,都会定义一个ViewHolder用于优化UI性能【详见】,RecycleView的实现,已经是自带ViewHolder的实现。请看示例。
- 实现Adapter,定义每个Item的布局UI和数据。
?
- public
class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> { - ?
- ????private List<String> mDatas = new ArrayList<>(0);
- ?
- ????public MyRecyclerAdapter(List<String> datas) {
- ????????if (datas != null) {
- ????????????mDatas.addAll(datas);
- ????????}
- ????}
- ?
- ????public
static
final
class ViewHolder extends RecyclerView.ViewHolder { - ?
- ????????private
final TextView textView; - ????????private
final Button button; - ?
- ?
- ????????public ViewHolder(View itemView) {
- ????????????super(itemView);
- ????????????textView = (TextView) itemView.findViewById(R.id.item_text);
- ????????????button = (Button) itemView.findViewById(R.id.item_button);
- ????????????button.setOnClickListener(new View.OnClickListener() {
- ?
- [email protected]
- ????????????????public
void onClick(View v) { - ????????????????????Toast.makeText(v.getContext(), String.valueOf(getPosition()), Toast.LENGTH_SHORT).show();
- ????????????????}
- ????????????});
- ????????}
- ?
- ????????public TextView getTextView() {
- ????????????return textView;
- ????????}
- ?
- ????????public Button getButton() {
- ????????????return button;
- ????????}
- ????}
- ?
- [email protected]
- ????public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- ????????View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);
- ????????return
new ViewHolder(view); - ????}
- ?
- [email protected]
- ????public
void onBindViewHolder(ViewHolder holder, int position) { - ????????holder.getButton().setText(String.valueOf(position));
- ????????holder.getTextView().setText(mDatas.get(position));
- ????}
- ?
- [email protected]
- ????public
int getItemCount() { - ????????return mDatas.size();
- ????}
- ?
- }
?
- public
- 初始化RecyclerView
设置Adapter和LayoutManager。LayoutManager定义了每个Item的排列形式。官方提供两种实现,LinearLayoutManager和GridLayoutManager,当然我们也可以根据需求,自己实现LayoutManager。
- recyclerView = (RecyclerView) findViewById(R.id.recycler);
- MyRecyclerAdapter adapter = new MyRecyclerAdapter(Datas.getDatas(1000));
- RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
- recyclerView.setLayoutManager(layoutManager);
- recyclerView.setAdapter(adapter);
RecyclerView就是这么简单。
时间: 2024-10-22 13:51:24