【问题标题】:Android onClick event not workingAndroid onClick 事件不起作用
【发布时间】:2014-09-26 20:45:48
【问题描述】:

我对 Android 开发还很陌生,我仍在阅读文档。顺便说一句,我试图在单击按钮时添加一个事件。代码如下:

<Button
  android:id="@+id/button1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignLeft="@+id/editText1"
  android:layout_below="@+id/editText1"
  android:layout_marginTop="24dp"
  android:text="Execute"
  android:onClick="onClickRadGard" />

我以这种方式声明 onClickRadGrad:

public class MainActivity extends ActionBarActivity {

    final Button buttonx = (Button) findViewById(R.id.button1);

    buttonx.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Perform action on clicks

        }
    });

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    }

我不知道问题出在哪里,因为 Eclipse 告诉我:

你有什么建议吗?你可以在这里找到完整的代码:link

【问题讨论】:

  • 由于您在 xml 中为您的 Button 定义了 android:onClick="onClickRadGard",因此您无需在 Java 中设置 OnClickListenerSee here

标签: android


【解决方案1】:

几个建议:

您在 xml 中声明了 android:onClick="onClickRadGard"。这意味着您的活动将期望找到具有以下签名的方法:

public void onClickRadGard(View view) {

}

如果未声明,您的应用程序将崩溃。当您按下android:id="@+id/button1" 时,将调用此方法,因此您无需在其上调用setOnClickListener

关于您遇到的编译时错误,我查看了您在链接中发布的代码。这两行必须在setContentView 之后定义,在onCreate 的正文中

final Button buttonx = (Button) findViewById(R.id.button1);

buttonx.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {
    //other code
  }
});

【讨论】:

    【解决方案2】:

    您应该只指定 android:onClick="onClickRadGard" 然后执行

    public class MyActivity extends Activity
    {
        ...
    
        public void onClickRadGard(View v)
        {
           ///code here
        }
    }
    

    或者如果您在 XML 中指定它,但只能使用侦听器:

    public class MyActivity extends Activity
    {
        ....
    
        Button button1;
    
        @Override
        public void onCreate(Bundle saveState)
        {
            super.onCreate(saveState);
            setContentView(R.layout.activity_my);
            button1 = (Button) findViewById(R.id.button1);
            button1.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                     //code here
                }
            });
         }
         ...
    }
    

    或者这样:

    public class MyActivity extends Activity implements View.OnClickListener
    {
        ....
    
        Button button1;
    
        @Override
        public void onCreate(Bundle saveState)
        {
            super.onCreate(saveState);
            setContentView(R.layout.activity_my);
            button1 = (Button) findViewById(R.id.button1);
            button1.setOnClickListener(this);
         }
    
         @Override
         public void onClick(View view)
         {
             if(view == button1)
             {
                ///code here
             }
         }
    }
    

    【讨论】:

      【解决方案3】:
      buttonx.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
              // Perform action on clicks
      
          }
      });
      

      把上面的代码放在onCreate()下面setContentView(..)下面。

      此外,由于您在活动中定义了onClickListener,因此您可以从 xml 中删除android:onClick="onClickRadGard"

      【讨论】:

        最近更新 更多