【问题标题】:How to set Genaral onCLick for Views in XML layout in android?如何在 android 的 XML 布局中为 Views 设置 General onCLick?
【发布时间】:2019-10-28 14:10:51
【问题描述】:

我的应用程序有 17 个 ImageButtons,每个都有一个动物图像,如果用户点击它。那个动物的声音会为用户播放。

正如我所说,我有 17 个 ImageButton。如果我想为每个按钮设置 OnClickListener。我必须编写 button.setOnCLickListenr(/*implementation*/);button.setOnCLickListenr(this);*(在实现 View.OnCLickLIstener 接口内)17 次

我的按钮离自己不近,所以我不能使用 RecyclerViewListViewGridLayout

有什么办法可以将 OnClickListener 的数量从 17 倍减少到更低。或者只使用一次 setOnClickListener 方法

谢谢...

【问题讨论】:

  • 您可以在android:onClick=yourMethodName 中为每个按钮调用相同的方法。在您的方法中,您可以检查视图 ID。

标签: java android android-layout


【解决方案1】:

您可以使用Butterknife 库,查看示例:

@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void onClicked(View view) {
   // do something 
}

【讨论】:

    【解决方案2】:

    您可以创建一个 OnClickListener 并将其设置为您的所有 ImageView。

    例子:

    public OnClickListener onClickListener {
       @Override
       public void onClick(View view){
          // Identify every imageview by its id 
    
       } 
    }
    
    
    imageview1.setOnClickListener(onClickListener)
    imageview2.setOnClickListener(onClickListener)
    imageview3.setOnClickListener(onClickListener)
    

    【讨论】:

    • @AlirezaBideli 您应该将此侦听器设置为所有图像按钮,没有其他方法可以做到。
    【解决方案3】:

    你可以这样尝试,而不是在每次点击时都创建一个内部类

     @Override
     public void onClick(View v) {
           int i = v.getId();
            switch (i){
                case R.id.btn1 :
                    break;
                case R.id.btn2 :
                    break;
            }
      }
    

    【讨论】:

    • 当然,您的解决方案比将 onClickListener 实现为匿名内部类要好,但我必须再次编写 setOnClickLIstener(this) 17 次。我想减少 OnClickListener 的数量,让我的代码更干净
    • 我有一些其他的事情我会在一段时间内发布它...... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多