使用RecyclerView的步骤:
- 创建一个Adapter,继承自RecyclerView.Adapter
- 创建一个ViewHolder,继承自RecyclerView.ViewHolder
- 在Adapter中实现onCreateViewHolder和onBindViewHolder方法
- 在Activity中创建RecyclerView,设置LayoutManager和Adapter
- 在Activity中设置数据
Adapter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> mData;
public MyAdapter(List<String> data) { mData = data; }
@NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); return new MyViewHolder(view); }
@Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.mTextView.setText(mData.get(position)); }
@Override public int getItemCount() { return mData.size(); }
static class MyViewHolder extends RecyclerView.ViewHolder { TextView mTextView;
public MyViewHolder(@NonNull View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text); } } }
|
Activity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private MyAdapter mAdapter; private List<String> mData;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mData = new ArrayList<>(); for (int i = 0; i < 100; i++) { mData.add("Item " + i); } mAdapter = new MyAdapter(mData); mRecyclerView.setAdapter(mAdapter); } }
|
item.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="8dp" app:cardCornerRadius="8dp">
<TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:textSize="24sp" />
</androidx.cardview.widget.CardView>
|
activity_main.xml
1 2 3 4 5
| <?xml version="1.0" encoding="utf-8"?> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" />
|
要创建一个带有Header的 RecyclerView,你需要使用 RecyclerView.Adapter 的不同 ViewType 来区分 Header 和普通列表项。以下是一个示例代码,展示如何创建一个带有 Header 的 RecyclerView:
- 在布局文件(例如 activity_main.xml)中添加 RecyclerView:
1 2 3 4 5 6 7
| <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:scrollbars="vertical" />
|
- 创建一个 RecyclerView 的布局文件(例如 item_list.xml)用于定义列表项的外观:
1 2 3 4 5 6 7 8 9
| <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:padding="8dp" />
|
- 创建一个 Header 的布局文件(例如 item_header.xml)用于定义 Header 的外观:
1 2 3 4 5 6 7 8 9 10 11
| <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/headerTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:padding="16dp" android:background="@color/colorAccent" <!-- 自定义背景颜色 --> android:textColor="@android:color/white" />
|
- 创建一个数据类(例如 ListItem.java)来表示 RecyclerView 中的每个项目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class ListItem { private String text; private boolean isHeader;
public ListItem(String text, boolean isHeader) { this.text = text; this.isHeader = isHeader; }
public String getText() { return text; }
public boolean isHeader() { return isHeader; } }
|
- 创建一个适配器类(例如 MyAdapter.java)来管理 RecyclerView 中的数据和视图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int VIEW_TYPE_HEADER = 0; private static final int VIEW_TYPE_ITEM = 1;
private List<ListItem> itemList;
public MyAdapter(List<ListItem> itemList) { this.itemList = itemList; }
@NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_HEADER) { View headerView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_header, parent, false); return new HeaderViewHolder(headerView); } else { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false); return new ItemViewHolder(itemView); } }
@Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { ListItem item = itemList.get(position);
if (holder.getItemViewType() == VIEW_TYPE_HEADER) { HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; headerViewHolder.headerTextView.setText(item.getText()); } else { ItemViewHolder itemViewHolder = (ItemViewHolder) holder; itemViewHolder.textView.setText(item.getText()); } }
@Override public int getItemCount() { return itemList.size(); }
@Override public int getItemViewType(int position) { if (itemList.get(position).isHeader()) { return VIEW_TYPE_HEADER; } else { return VIEW_TYPE_ITEM; } }
private static class HeaderViewHolder extends RecyclerView.ViewHolder { TextView headerTextView;
HeaderViewHolder(View itemView) { super(itemView); headerTextView = itemView.findViewById(R.id.headerTextView); } }
private static class ItemViewHolder extends RecyclerView.ViewHolder { TextView textView;
ItemViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } }
|
- 在 Activity 中初始化 RecyclerView 并设置适配器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List;
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private MyAdapter adapter; private List<ListItem> itemList;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView); itemList = new ArrayList<>(); itemList.add(new ListItem("Header 1", true)); itemList.add(new ListItem("Item 1", false)); itemList.add(new ListItem("Item 2
", false)); itemList.add(new ListItem("Header 2", true)); itemList.add(new ListItem("Item 3", false)); itemList.add(new ListItem("Item 4", false));
adapter = new MyAdapter(itemList); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); } }
|
这个示例创建了一个带有 Header 的 RecyclerView,Header 项具有不同的外观,并与普通列表项一起显示。你可以根据需要自定义 Header 和列表项的外观以适应你的应用程序需求。
如何写RecyclerView里item中的控件的点击事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> dataList;
public MyAdapter(List<String> dataList) { this.dataList = dataList; }
@NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); }
@Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { String itemText = dataList.get(position); holder.button.setText(itemText);
holder.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); }
@Override public int getItemCount() { return dataList.size(); }
public class ViewHolder extends RecyclerView.ViewHolder { Button button;
public ViewHolder(@NonNull View itemView) { super(itemView); button = itemView.findViewById(R.id.button); } } }
|
参考