【问题标题】:Common class for click listener点击监听的通用类
【发布时间】:2013-05-28 00:49:28
【问题描述】:

我在所有 6 个活动中都有 7 个按钮。所有 6 个按钮在所有活动中都具有相同的功能。如何为这 6 个按钮执行常见的单击事件侦听器。

【问题讨论】:

  • 常见任务是什么?
  • 不管它是什么。显示所有按钮的 Toast。

标签: android onclicklistener android-button


【解决方案1】:

在一个类中创建一个函数,并将该类放在所有其他类所在的同一个包中。只需在 6 个 onclicklisteners 中调用该函数即可。

【讨论】:

    【解决方案2】:

    有这样的课程:

    public class OnClickMaker{
        public static View.OnClickListener getOnClick(){
             return new View.OnClickListener(){
                  public void on click(View v){
                      //do stuff
                  }
              };
        }
    }
    

    然后在你的其他班级,这样做

    button.setOnClickListener(OnClickMaker.getOnClick());
    

    【讨论】:

      【解决方案3】:

      你可以这样做,

      将点击事件放入XML文件android:click="clickMe"

      Activity 中创建这个函数

      public void clickMe(View view) {
      ...//You handling code
      }
      

      并通过您的所有活动扩展此活动。

      【讨论】:

      • 我忘了提到我在所有活动中膨胀按钮布局。那么在那种情况下我该怎么做呢。
      • 将按钮的布局文件保存为单独的 xml 布局文件,并将其包含在所有活动布局中。这也将带来代码重用和易于修改的优势。
      【解决方案4】:

      您可以像这样创建一个实现 View.OnClickListener 的新类:

      public class MyClickListener implements View.OnClickListener {
          @Override
          public void onClick(View view) {
               // TODO handle the click   
          }
      }
      

      在您的所有活动中,您可以像这样设置点击侦听器:

      button.setOnClickListener(new MyClickListener());
      

      您甚至可以将上下文保存在类中以显示 Toast 等。

      public class MyClickListener implements View.OnClickListener {
          private Context context;
      
          public MyClickListener(Context context) {
              this.context = context;
          }
      
          @Override
          public void onClick(View view) {
               Button button = (Button) view;
               Toast.makeText(this.context, button.getText().toString(), Toast.LENGTH_SHORT).show();
          }
      }
      

      【讨论】:

      • 哇..多么简单的解决方案。我想知道为什么到目前为止你还没有得到任何 +1。谢谢。
      【解决方案5】:

      你可以这样做

      创建一个基础活动

      class BaseActivity extends Activity{
          public void onSpecificEvent(View v){
              // do your tasks
          }
      }
      

      现在从这个扩展你的活动

      class Activity1 extends BaseActivity
      class Activity2 extends BaseActivity
      

      在xml中你需要在哪些按钮中实现onClick使用

      android:onClick="onSpecificEvent"
      

      【讨论】:

        【解决方案6】:

        在上面给出的 Sagar 回答中添加更多词。

        假设:

        正如您所说,您的 6 个活动中有 7 个按钮,我假设所有 7 个按钮都具有相同的功能/代码。

        解决方案:

        第 1 步:在您的 XML 布局中将 android:click="btnFirstClick" 包含在 <Button> 中。

        第 2 步: 通过扩展 Activity 定义抽象 BaseActivity 类,并包含与您在 android:onClick 属性中指定的名称相同的方法。

        abstract public class BaseActivity extends Activity {
        
           /** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
           }
        
           public void btnFirstClick(View v) {
           }
        
           public void btnSecondClick(View v) {
           }
        
           .....
           .....
          // same for other buttons
        }
        

        第 3 步:现在将此 BaseActivity 扩展到您的所有 6 个活动。

        例如:

        public class FirstActivity extends BaseActivity {
        
            /** Called when the activity is first created. */
            @Override
            public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState); 
                   setContentView(R.layout.layout_first);
            }
        }
        

        【讨论】:

        • 我忘了提到我在所有活动中膨胀按钮布局。所以在那种情况下我该怎么办。
        • @URAndroid 感谢您浪费我们大家的时间!!
        【解决方案7】:

        如果您遇到和我一样的情况,我有一个线性布局,其中包含不确定数量的按钮(动态生成),并且您希望所有按钮都有一个通用侦听器(例如,注销其文本),您可以这样做

        for (int i = 0; i < linearLayout.getChildCount(); i++)
            {
                final Button b = (Button) linearLayout.getChildAt(i);
                b.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Commons.log(b.getText().toString());
                        //your other code here
                    }
                });
            }
        

        现在线性布局的所有子(按钮)都有相同的点击监听器

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多