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

08-18 04:31
查看更多