2 回答

TA貢獻(xiàn)1796條經(jīng)驗 獲得超10個贊
這是因為您正在分配“自身的上下文”。從初始化適配器的類中傳遞上下文。
假設(shè)我有名為“ClubAdapter”的適配器和名為“ClubClass”的調(diào)用類
在俱樂部類:
ClubAdapter clubAdapter = new ClubAdapter(list, context);
// if you'r calling it from activity then pass "Activity.this" and if fragment then "getContext()" as context.
并在 ClubAdapter
public class ClubAdapter extends RecyclerView.Adapter<ClubAdapter.ClubHolder> {
private Context context;
private List<String> list;
public ClubAdapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public ClubHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_sample, viewGroup, false);
return new ClubHolder(itemView, context);
}
public class ClubHolder extends RecyclerView.ViewHolder {
private Context context;
private ClunHolder(@NonNull View itemView,Context context) {
super(itemView);
this.context = context;
}
}
}
或者你可以制作這樣的界面。
public interface RecycleViewOnItemClickListener {
void onItemClick(int position);
}
并將其從調(diào)用類傳遞給您的適配器。
假設(shè)我有名為“SampleAdapter”的適配器并調(diào)用名為“SampleClass”的類在“SampleClass”中,您可以將適配器中的接口作為參數(shù)傳遞。
SampleAdapter sampleAdapter = new SampleAdapter(list, new RecycleViewOnItemClickListener() {
@Override
public void onItemClick(int position) {
// do what you want to perform
}
});
在“俱樂部適配器”中
public class ClubAdapter extends RecyclerView.Adapter<ClubAdapter.ClubHolder> {
private RecycleViewOnItemClickListener recycleViewOnItemClickListener;
private List<String> list;
public ClubAdapter(List<String> list, RecycleViewOnItemClickListener recycleViewOnItemClickListener) {
this.list = list;
this.recycleViewOnItemClickListener = recycleViewOnItemClickListener;
}
@NonNull
@Override
public ClubHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_sample, viewGroup, false);
return new ClubHolder(itemView, recycleViewOnItemClickListener);
}
public class ClubHolder extends RecyclerView.ViewHolder {
private RecycleViewOnItemClickListener recycleViewOnItemClickListener;
private ClunHolder(@NonNull View itemView,RecycleViewOnItemClickListener recycleViewOnItemClickListener) {
super(itemView);
this.recycleViewOnItemClickListener = recycleViewOnItemClickListener;
//you can callback onItemClick method from here on button click event so it give callback in "ClubActivity".
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recycleViewOnItemClickListener.onItemClick(getAdapterPosition());
}
});
}
}
}

TA貢獻(xiàn)1817條經(jīng)驗 獲得超6個贊
要解決此問題,請在方法中移動以下代碼行,onBindViewHolder()如下所示:
holder.btnDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, ViewSingleClub.class);
i.putExtra("id", clubId);
context.startActivity(i);
}
});
看,我在holder.btnDetails.
編輯:
根據(jù)您的意見,還請進(jìn)行以下操作。將構(gòu)造函數(shù)更改為:
public ClubAdapter1(@NonNull FirestoreRecyclerOptions<Club> options, Context context) {
super(options);
this.context = context;
}
當(dāng)您在活動中創(chuàng)建適配器類的對象時,還將 傳遞context給構(gòu)造函數(shù)。
添加回答
舉報