【问题标题】:Button on click listener单击侦听器上的按钮
【发布时间】:2015-07-31 04:04:11
【问题描述】:

我来自 iOS 世界,刚开始接触 Android。我参加了 Java 培训,所以我知道如何创建一个方法,但我没有得到操作。

我想做的是从一个按钮创建一个方法操作,但我找不到任何地方如何做到这一点(显然是找错了地方)。当我点击按钮 1 时,我想创建一个内部只有 a=1 的方法,当我点击按钮 2 时,我想要 a=2(然后我可以决定当 a 为 1 或 2 时该怎么做)。

我在 Acitivity_main.xml 中创建了我的按钮,并在 OnClick 中给出了一个方法名称,但仅此而已。

当我与 iOS 比较时,这似乎是如此基本,以至于我不明白为什么我找不到如何去做。

请一位好心人为我指明创建动作的正确方向吗?

【问题讨论】:

  • 您的 Activity 和布局中目前有哪些内容?你试过什么?这是 Android 中所有帮助材料中都包含的概念。我建议阅读 Android 上的 Vogella 教程:vogella.com/tutorials/Android/…
  • @Clarrhea...请在下面查看我的解决方案:-

标签: android button methods action


【解决方案1】:
  • 在您的活动布局中创建两个按钮并分配一些 id 他们喜欢这样

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button2"
        android:layout_gravity="center_horizontal|top" />
    

    然后,在您的活动类文件中获取那些 按钮并设置 onclick 侦听器,如下所示(将所有内容写入 onCreate()onResume 方法)。在 onClick 方法里面做任何事情 你想要的。

      Button myButton1;
      Button myButton2;
      int a;
      protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_home);
               myButton1 = (Button) findViewById(R.id.my_button1); 
    
               myButton1.setOnClickListener( new OnClickListener() {
    
                   @Override
                   public void onClick(View v) { a =1;
               }
    
                myButton2 = (Button) findViewById(R.id.my_button1);
                myButton2.setOnClickListener( new OnClickListener() {
    
                   @Override
                   public void onClick(View v) { a =2;
               }
    

【讨论】:

    【解决方案2】:

    您有三个选择:

    常见于 1,2) 您需要为布局 XML 文件中的每个按钮分配一个 id

    <Button android:id="@+id/my_button1"
    ..........
    />
    <Button android:id="@+id/my_button2"
    ..........
    />
    

    1)setContentView()之后的activity的onCreate()方法中,你需要为每个按钮设置一个新的OnClickListener

     public class MyActivity extends Activity  {
        int a;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button myButton1 = (Button) findViewById(R.id.my_button1);
            Button myButton2 = (Button) findViewById(R.id.my_button2);
    
            myButton1.setOnClickListener( new OnClickListener() {
              @Override
                public void onClick(View v) {
                    // Do what you want here
                    a = 1;
                }
            });
    
            myButton2.setOnClickListener( new OnClickListener() {
               @Override
                public void onClick(View v) {
                    // Do what you want here
                    a = 2;
                }
            });
          }
    

    2) 正如您在第一种方法中看到的,我们需要从OnClickListener 为每个按钮创建一个新对象。出于性能可读性的原因,我们可以将所有这些组合成一个OnClickListener

    public class MyActivity extends Activity implements View.OnClickListener {
        int a;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button myButton1 = (Button) findViewById(R.id.my_button1);
            myButton1.setOnClickListener(this);
            Button myButton2 = (Button) findViewById(R.id.my_button2);
            myButton2.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.my_button_1:
                    a = 1;
                    break;
                case R.id.my_button_2:
                    a = 2;
                    break;
            }
        }
        ...
    }
    

    3) 您不需要为此选项分配 id,您只需要在 XML 中分配方法名称,然后在活动中以完全相同的名称实现相同的方法,但它必须将 View 对象作为参数。

    <Button 
    ...
    android:onClick="button1Click" />
    
    <Button 
    ...
    android:onClick="button2Click" />
    

    然后在您的活动中编写方法。

    public class MyActivity extends Activity implements View.OnClickListener {
        int a;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void button1Click(View v) {
           a = 1;
        }
    
    
        public void button2Click(View v) {
           a = 2;
        }
    }
    

    这就是你所有的选择。我个人更喜欢2号。

    【讨论】:

    • 干得好兄弟......你的回答应该真的可以接受...... :)......从我这边+1 ..
    • 感谢 Hegazy 花时间详细解释。你是第一个,所以你得到我的投票。感谢所有其他人,您也非常乐于助人。有谁知道为什么点击 + 箭头后它变成橙色而不是绿色?
    • 谢谢。 + 箭头是什么意思?
    • hegazy,我的意思是向上箭头。在您的答案左侧,就在“您有 3 个选项”旁边,有一个向上的橙色箭头。我点击它来投票给你。我以为当你投票给某人时,会有一个绿色的“东西”?可能是我对 Apple 论坛感到困惑,哈哈。
    • 您所做的是对答案投了赞成票,但不接受它作为正确答案。您必须单击否决票下方的图标才能接受答案。
    【解决方案3】:

    有两种方法可以对按钮单击执行操作

    1. 第一种方法是在 Button 代码的布局 (xml) 文件中设置一个 android:OnClick = "methodName" 并在 java 代码中使用该方法来访问该 Button 就像

      public void methodName(View v) {
          // Do what you want to perform on Button click
      }
      
    2. 在按钮后面执行某些操作的第二种方法是在 Java 代码中访问该按钮并执行您想做的操作

       Button button = findViewById(R.id.button);
       button.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {
                  // Do what you want to perform on that button click
               }
           });
      

    【讨论】:

      【解决方案4】:

      首先在您的 xml 文件中分配按钮,如下所示:-

      <Button android:id="@+id/button1"
      ..........
      />
      
      <Button android:id="@+id/button2"
      ..........
      />
      

      在从 xml 中找到 id 之后,在其上设置 OnclickListener,如下所示,不要忘记在你的类上实现 OnClickListener 侦听器,例如 public class CLASSNAME extends Activity implements OnClickListener

       button1 .setOnClickListener(CLASSNAME.this);
       button2.setOnClickListener(CLASSNAME.this);
      

      在实现 onclickListener 之后,它将为您提供一个覆盖的方法,如 onclick(View v)

      @Override
      public void onClick(View v) {
      
          switch (v.getId()) {
          case R.id.button1 : //Here i assumes that button1 is the name of button in yours xml which you declare button1
          //  do something on button1 click
          break;
      
          case R.id.button2 :////Here i assumes that button2 is the name of button in yours xml which you declare button2
      
          //  do something on button2 click
          break;
       }
      }
      

      【讨论】:

        【解决方案5】:

        您有两个选项来处理按钮,来自documentation

        a) 在你的 java 文件中声明和定义你的方法

            int a = 0;
            final Button button = (Button) findViewById(R.id.button_id);
                     button.setOnClickListener(new View.OnClickListener() {
                         public void onClick(View v) {
                             a = 1;
                         }
                     });
        

        b) 或者在你的 xml 布局中定义你的方法:

         <Button
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:text="@string/self_destruct"
             android:onClick="selfDestruct" />
        

        然后在你的java文件中:

         int a = 0;
         public void selfDestruct(View view) {
             a = 1;
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-14
          • 1970-01-01
          • 2018-08-05
          • 1970-01-01
          • 1970-01-01
          • 2011-12-02
          • 2017-06-18
          • 1970-01-01
          相关资源
          最近更新 更多