activity_main.xml上的默认按钮格式导致崩溃

时间:2017-01-30 00:21:07

标签: java android xml android-studio

我是Android Studio新手,我正在关注{{3}}教程以了解如何编写代码。我在我的activity_main.xml中放了一个按钮,并使用拖放方法将按钮的 onClick 属性引用到我的MainActivity.java文件中的方法 buttonOnClick ( xml文件的设计选项卡)。原始代码如下:

activity_main.xml(省略了非相关代码):

<Button
    android:text="@string/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/button"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:visibility="visible"
    android:onClick="buttonOnClick (MainActivity)" />

MainActivity.java:

public class MainActivity extends AppCompatActivity {

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

  public void buttonOnClick(View v) {
    Button button = (Button) v;
    button.setText("Click");
  }

运行此代码后,当我点击按钮时,它崩溃了。如果我删除了 onClick 属性的(MainActivity)部分,它就可以了。我不知道为什么会这样,但确实如此。有人或许可以告诉我为什么吗?

应用程序崩溃时收到的错误消息如下:

  

java.lang.IllegalStateException:找不到方法buttonOnClick   (MainActivity)(View)在父或祖先的Context中   android:在视图类上定义的onClick属性   带有id&#39;按钮&#39;

的android.support.v7.widget.AppCompatButton

3 个答案:

答案 0 :(得分:0)

似乎假定(View),因此您也不需要(MainActivity)。

<Button
    android:text="@string/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/button"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:visibility="visible"
    android:onClick="buttonOnClick" />

答案 1 :(得分:0)

android:onClick="buttonOnClick (MainActivity)"更改为

 android:onClick="buttonOnClick"

答案 2 :(得分:0)

试试这个: 删除android:onClick =&#34; buttonOnClick(MainActivity)&#34;来自xml

<Button
    android:text="@string/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/button"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:visibility="visible" />

编写onClick in code

   public class MainActivity extends AppCompatActivity {

    public Button b1; 

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

    b1 = (Button)findViewById(R.id.button);  
    b1.setOnClickListener(new OnClickListener(){  

            @Override  
            public void onClick(View view) { 
            b1.setText("Click");


  }

     }); 

    }

    }