【问题标题】:How can add same onClick for all imageView in Recyclerview?如何为 Recyclerview 中的所有 imageView 添加相同的 onClick?
【发布时间】:2019-07-10 07:06:54
【问题描述】:

我的项目做巴士票预订所以,当单击recyclierview 中的item 时,将打开巴士座位为50 imageView。我知道如何为一个imageView 添加onClick,但对于我不知道的50 个imageView。我尝试了一些在 stackOverflow 中看到的解决方案。但没有任何工作。您能给我一些关于预订巴士的建议或解决方案吗?

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

我尝试添加此代码并实现 onClick 方法,但它不执行 onClick 内部的操作。

我想将 relative_bus_seat onClick 做的事情添加到这 50 个 imageView 做的事情中。

BusAdapter.java

 public class BusAdapter extends RecyclerView.Adapter<BusAdapter.ViewHolder> {
        private Context context;
        private List<Bus> busList;
        private static String phoneNumber;
        private static final int PERMISSION_CODE = 101;
        private RecyclerView recyclerView;
        private Locale trlocale;


        VoyageAdapterToResultActivityListener voyageAdapterToResultActivityListener;

        public BusAdapter(Context _context, List<Bus> _busList, RecyclerView recyclerView) {
            this.context = _context;
            this.busList = _busList;
            this.recyclerView = recyclerView;
            this.trlocale = new Locale("tr-TR");
            voyageAdapterToResultActivityListener = (VoyageAdapterToResultActivityListener) context;
        }
        public class ViewHolder extends RecyclerView.ViewHolder {
            private TextView tvPrice, text_seat;
            private CardView cardV_row_voyage;
            private RelativeLayout relative_bus_seat;

            // Seats
            private ImageView imageV_seat1, imageV_seat2, imageV_seat3, imageV_seat4, imageV_seat5, imageV_seat6, imageV_seat7,
                    imageV_seat8, imageV_seat9, imageV_seat10, imageV_seat11, imageV_seat12, imageV_seat13, imageV_seat14, imageV_seat15,
                    imageV_seat16, imageV_seat17, imageV_seat18, imageV_seat19, imageV_seat20, imageV_seat21, imageV_seat22, imageV_seat23,
                    imageV_seat24, imageV_seat25, imageV_seat26, imageV_seat27, imageV_seat28, imageV_seat29, imageV_seat30, imageV_seat31,
                    imageV_seat32, imageV_seat33, imageV_seat34, imageV_seat35, imageV_seat36, imageV_seat37, imageV_seat38, imageV_seat39,
                    imageV_seat40, imageV_seat41, imageV_seat42, imageV_seat43, imageV_seat44, imageV_seat45, imageV_seat46, imageV_seat47,
                    imageV_seat48, imageV_seat49, imageV_seat50;

            private ViewHolder(View view) {
                super(view);
                recyclerView.setHasFixedSize(true);
              // this.setIsRecyclable(false);
                constraintLayout_expanded = view.findViewById(R.id.constraintLayout2);
                cardV_row_voyage = view.findViewById(R.id.cardV_row_voyage);
                relative_bus_seat = view.findViewById(R.id.relative_seat);
               //  expandable_layout = view.findViewById(R.id.expandable_layout);
                progressB_dialog_seat = view.findViewById(R.id.progressB_dialog_seat);
                relativeL_row_voyage_view = view.findViewById(R.id.relativeL_row_voyage_view);
                relativeL_row_voyage_view_main = view.findViewById(R.id.relativeL_row_voyage_view_main);

                textView_seat2 = view.findViewById(R.id.textView_seat2);
                textView_seat5 = view.findViewById(R.id.textView_seat5);

                tvPrice = view.findViewById(R.id.tv_Price);
                textV_travel_duration_row_voyage = view.findViewById(R.id.textV_travel_duration_row_voyage);
                textV_from_time = view.findViewById(R.id.textV_from_time_row_voyage);
                imgLogo = view.findViewById(R.id.textV_company_name);
                textV_from_row_voyage = view.findViewById(R.id.textV_from_row_voyage);
                textV_to_row_voyage = view.findViewById(R.id.textV_to_row_voyage);
                text_seat = view.findViewById(R.id.text_seat);
                imageV_seat1 = view.findViewById(R.id.imageV_seat1);imageV_seat2 = view.findViewById(R.id.imageV_seat2);imageV_seat3 = view.findViewById(R.id.imageV_seat3);imageV_seat4 = view.findViewById(R.id.imageV_seat4);
                imageV_seat5 = view.findViewById(R.id.imageV_seat5);imageV_seat6 = view.findViewById(R.id.imageV_seat6);imageV_seat7 = view.findViewById(R.id.imageV_seat7);imageV_seat8 = view.findViewById(R.id.imageV_seat8);
                imageV_seat9 = view.findViewById(R.id.imageV_seat9);imageV_seat10 = view.findViewById(R.id.imageV_seat10);imageV_seat11 = view.findViewById(R.id.imageV_seat11);imageV_seat12 = view.findViewById(R.id.imageV_seat12);
                imageV_seat13 = view.findViewById(R.id.imageV_seat13);imageV_seat14 = view.findViewById(R.id.imageV_seat14);imageV_seat15 = view.findViewById(R.id.imageV_seat15);imageV_seat16 = view.findViewById(R.id.imageV_seat16);
                imageV_seat17 = view.findViewById(R.id.imageV_seat17);imageV_seat18 = view.findViewById(R.id.imageV_seat18);imageV_seat19 = view.findViewById(R.id.imageV_seat19);imageV_seat20 = view.findViewById(R.id.imageV_seat20);
                imageV_seat21 = view.findViewById(R.id.imageV_seat21);imageV_seat22 = view.findViewById(R.id.imageV_seat22);imageV_seat23 = view.findViewById(R.id.imageV_seat23);imageV_seat24 = view.findViewById(R.id.imageV_seat24);
                imageV_seat25 = view.findViewById(R.id.imageV_seat25);imageV_seat26 = view.findViewById(R.id.imageV_seat26);imageV_seat27 = view.findViewById(R.id.imageV_seat27);imageV_seat28 = view.findViewById(R.id.imageV_seat28);
                imageV_seat29 = view.findViewById(R.id.imageV_seat29);imageV_seat30 = view.findViewById(R.id.imageV_seat30);imageV_seat31 = view.findViewById(R.id.imageV_seat31);imageV_seat32 = view.findViewById(R.id.imageV_seat32);
                imageV_seat33 = view.findViewById(R.id.imageV_seat33);imageV_seat34 = view.findViewById(R.id.imageV_seat34);imageV_seat35 = view.findViewById(R.id.imageV_seat35);imageV_seat36 = view.findViewById(R.id.imageV_seat36);
                imageV_seat37 = view.findViewById(R.id.imageV_seat37);imageV_seat38 = view.findViewById(R.id.imageV_seat38);imageV_seat39 = view.findViewById(R.id.imageV_seat39);imageV_seat40 = view.findViewById(R.id.imageV_seat40);
                imageV_seat41 = view.findViewById(R.id.imageV_seat41);imageV_seat42 = view.findViewById(R.id.imageV_seat42);imageV_seat43 = view.findViewById(R.id.imageV_seat43);imageV_seat44 = view.findViewById(R.id.imageV_seat44);
                imageV_seat45 = view.findViewById(R.id.imageV_seat45);imageV_seat46 = view.findViewById(R.id.imageV_seat46);imageV_seat47 = view.findViewById(R.id.imageV_seat47);imageV_seat48 = view.findViewById(R.id.imageV_seat48);
                imageV_seat49 = view.findViewById(R.id.imageV_seat49);imageV_seat50 = view.findViewById(R.id.imageV_seat50);



            relative_bus_seat.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        final int position = getAdapterPosition();
                        final Bus bus = busList.get(position);

                        final CartStateResultBus resultBus1 = Cart.getInstance(context).ifValidAddToCartBus(bus);
                        ////aynı şeye iki kere tıklanırsa
                        if (resultBus1.isSuccessBus) {
                            ////carttan siler aynı directionları ve yayın yapar result activitye
                            Cart.getInstance().addBusToCart(bus);
                            notifyDataSetChanged();
                            voyageAdapterToResultActivityListener.updateAdded();



                        } else  {                           Cart.getInstance(context).removeFromCartByDirectionBetweenSameTypesBus(bus.getDirection());
                            notifyDataSetChanged();
                            voyageAdapterToResultActivityListener.updateRemoved();

                        }

                    }
                });
            }


        }
        @Override
        public int getItemCount() {
            return busList.size();
        }



}

【问题讨论】:

    标签: java android android-recyclerview onclicklistener


    【解决方案1】:

    首先实现接口OnClickListener到你的ViewHolder

     public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 
    

    然后像这样将点击监听器添加到图像视图中

    private ViewHolder(View view) {
                    super(view);
    
          //Your code here after
    
     imageV_seat1.setOnClickListener(this);
        //add for all the image views
    
    
    }
    

    并在 Override 方法 onClick 用户切换语句以获得快速执行

    public void onClick(View v) {
    
            switch (v.getId()) {
    
                case R.id.imageV_seat1:
    
                   // Code Here
                    break;
    
         // add for reset ids
    
    }
    }
    

    【讨论】:

      【解决方案2】:

      为了使代码更小,请使用lambda:

      holder.yourImage.setOnClickListener(view -> {
          // do something here
      });
      

      【讨论】:

        【解决方案3】:

        你可以实现 onCLickListener 并在 onClick() 方法中检查它的 imageView,如果它的 imageView 你可以编写你的逻辑。

         public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
        
        @Override
        public void onClick(View view) {
            if(view instanceof ImageView)
           //write your logic here or you can get view.getId method also to write logic for individual imageview
        }
        

        【讨论】:

        • 我在调试中试过,但它没有踩到点击。所以,它不起作用。
        • 在此请绑定您的图像视图,例如 imageview.setOnClickListeners(this);
        【解决方案4】:

        这可以使用一些逻辑游戏来实现。虽然我没有测试它,因为我现在没有可用的 IDE,但代码应该可以工作。

            public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
            private Button mButton; 
        
             private ViewHolder(View view)
            { 
                .....Your existing code
        
                button1.setOnClickListener(this); 
                button2.setOnClickListener(this);
                button3.setOnClickListener(this);
                .
                .
                .
                button50.setOnClickListener(this);
            } 
        
            @Override
            public void onClick(View view) 
            { 
                switch (view.getId()) { 
                case R.id.button1: 
                case R.id.button2:
                case R.id.button3:
                .
                .
                .
                case R.id.button50:
                    // Do something... by doing this all case will come to this block to execute.
                    // Remember, do not use break in any of the above case.
                } 
            } 
        }
        

        如果它解决了您的问题,请告诉我。

        【讨论】:

          【解决方案5】:

          就那样做吧:-

          holder.yourImage.setOnClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                          // your code hare
                      }
                  });
          

          【讨论】:

          • 我知道这一点,但我不想为所有 imageView 添加相同的长代码。这不合逻辑。 50 imageView 这是很多代码。
          • 首先,你不需要像这样创建那么多图像。 Recycler 视图可以为您创建所有视图,然后,您可以在 holder.itemView 上设置 onClick 并获取位置然后做您想做的事情。
          猜你喜欢
          • 2016-01-20
          • 1970-01-01
          • 2022-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-20
          相关资源
          最近更新 更多