[英]Handling button click in RecyclerView adapter?
我在適配器RecyclerView中的按鈕有問題。 當我單擊它時,有時不直接執行該動作。 我必須滾動一些RecyclerView,以便直接執行該動作。 這是我的適配器:
public class ViewHolder extends RecyclerView.ViewHolder {
public Button btn_action;
public ViewHolder(View vi) {
super(vi);
btn_action = (Button) vi.findViewById(R.id.btn_action);
}
@Override
public NewsRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.pin_item_news_recyclerview, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.btn_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
activity.TakePhoto();
}
});
}
}
這是活動中TakePhoto()的動作。
public void TakePhoto() {
if (isIntentAvailable(getActivity(), MediaStore.ACTION_IMAGE_CAPTURE)) {
dispatchTakePictureIntent(ACTION_TAKE_PICTURE_BIG);
} else {
messageRespone("Maaf, tidak bisa memanggil Camera.");
}
}
那么我該如何解決呢? 謝謝。
您應該使ViewHolder本身實現on click界面,然后將偵聽器設置為如下所示的按鈕:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ViewHolder(View view) {
super(view);
button = (Button) view.findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Toast.makeText(context, "Clicked button at position: " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
}
解決您的問題..在oncreateViewHolder方法中設置OnClickListner。
在bind方法中使用此方法只是為了避免創建大量偵聽器對象,而您並不需要它們。在bind方法中,您不再需要它!
OnBindViewHoler(){
if(holder.btn_action.getOnClickListener()==null)
holder.btn_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
activity.TakePhoto();
}
});}
我解決了這個問題,並且萬一您需要處理多個按鈕,它也可以正常工作
public class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View view){
super(view);
button = (Button) view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Clicked button at position: " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.