Android——RecyclerView
RecyclerView的使用
- 依赖
implementation("androidx.recyclerview:recyclerview:1.4.0")
- activity_recyclerview.xml
<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="match_parent" />
- RecyclerviewActivity.java
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_recyclerview);RecyclerView recyclerView = findViewById(R.id.rv);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);recyclerView.setLayoutManager(linearLayoutManager);RecyclerviewAdapter adapter = new RecyclerviewAdapter(Planet.getDefaultList(), this);recyclerView.setAdapter(adapter);}
- RecyclerviewAdapter.java
public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerviewAdapter.ViewHolder> {private List<Planet> data;private Context context;public RecyclerviewAdapter(List<Planet> data, Context context) {this.data = data;this.context = context;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = View.inflate(context, R.layout.recyclerview_item, null);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {holder.tv.setText(data.get(position).name);}@Overridepublic int getItemCount() {return data == null ? 0 : data.size();}public class ViewHolder extends RecyclerView.ViewHolder {private TextView tv;public ViewHolder(@NonNull View itemView) {super(itemView);tv = itemView.findViewById(R.id.tv);}}
}
- 绑定点击事件
使用接口实现回调
public ViewHolder(@NonNull View itemView) {super(itemView);tv = itemView.findViewById(R.id.tv);itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mOnItemClickListener != null) {mOnItemClickListener.onRecyclerItemClick(getLayoutPosition());}}});}
在adapter中实现一个接口
private OnRecyclerItemClickListener mOnItemClickListener;public void setRecyclerItemClickListener(OnRecyclerItemClickListener listener) {mOnItemClickListener = listener;}public interface OnRecyclerItemClickListener {void onRecyclerItemClick(int position);}
在Activity中传入回调方法
adapter.setRecyclerItemClickListener(new RecyclerviewAdapter.OnRecyclerItemClickListener() {@Overridepublic void onRecyclerItemClick(int position) {Log.d("TAG", "" + position);}});
案例代码