Android onClick事件无效

时间:2014-09-26 20:45:49

标签: android

我是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告诉我这个: enter image description here

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

3 个答案:

答案 0 :(得分:5)

几点建议:

您在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 } });

{{1}}

答案 1 :(得分:2)

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

    }
});

将上述代码放在onCreate()下面的setContentView(..)内。

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

答案 2 :(得分: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
         }
     }
}