簡體   English   中英

處理按鈕是否在RecyclerView適配器中單擊?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM