📅  最后修改于: 2023-12-03 15:24:22.427000             🧑  作者: Mango
在 Android 的 RecyclerView 中,适配器是用来将数据与视图进行关联的重要组件。在适配器中,我们不可避免地需要获取上下文(Context)对象,例如用于加载布局(Inflate)或者启动 Activity 等操作。
本篇文章将介绍在 RecyclerView 适配器中如何获取上下文对象,并提供常见的方法和代码片段,帮助程序员快速解决相关问题。
在 RecyclerView 适配器的构造函数中传递上下文对象,然后在适配器中使用该对象即可。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context mContext;
private List<String> mData;
public MyAdapter(Context context, List<String> data) {
mContext = context;
mData = data;
}
// ...
}
注意:不要使用 Activity 或者 Application 的上下文对象,因为这样容易造成内存泄漏。建议使用 Application 的上下文对象。
在 RecyclerView.ViewHolder 中,有一个 itemView 属性,它可以用来获取上下文对象。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> mData;
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text_view);
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String data = mData.get(position);
holder.mTextView.setText(data);
Context context = holder.itemView.getContext();
// ...
}
// ...
}
在 RecyclerView.ViewHolder 中,每个 View 都有一个 getContext() 方法,它可以用来获取上下文对象。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> mData;
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text_view);
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String data = mData.get(position);
holder.mTextView.setText(data);
Context context = holder.mTextView.getContext();
// ...
}
// ...
}
在 RecyclerView 适配器中获取上下文对象,有多种方法可选。根据实际情况来选择最合适的方法,以便在适配器中正常操作视图。
建议优先使用第二种方法,因为它不需要额外存储上下文对象,并且避免了内存泄漏的风险。如果第二种方法无法满足需要,可以考虑使用第一种或者第三种方法。