我在适配器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();
}
}