Android Studio - 按钮单击崩溃(简单)

时间:2016-12-27 06:47:52

标签: android

我是Android Studio的新手,无论出于什么原因,如果我能得到一些帮助,我会遇到非常奇怪的错误。

我有非常基本的代码,应该在按钮点击时更改我的按钮的文本来自"按钮"到"点击!"。然而,每当我按下按钮,应用程序崩溃,我得到" Appname已停止"在模拟器上。

令人难以置信的是,在我的activity_main.xml设计视图中,onClick下拉列表显示了两个同名的函数(https://puu.sh/t2h5I/42ad4379d6.png

无论代码仅在选择底部代码时才起作用。并且每次我运行应用程序时,它取消选择底部并重新选择顶部,仅停止工作。

这是我的MainActivity:

package com.example.john.ameladay;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    public Button melButtonCode;

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

    public void buttonPress(View v){
        melButtonCode = (Button) v;
        ((Button) v).setText("Has been clicked!");

    }
}

这是我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.john.ameladay.MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/mainText"
    android:id="@+id/textView" />

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:src="@drawable/mela"
    android:id="@+id/melPhoto" />

<Button
    android:text="Button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/textView"
    android:layout_toEndOf="@+id/textView"
    android:layout_marginLeft="32dp"
    android:layout_marginStart="32dp"
    android:layout_marginBottom="43dp"
    android:id="@+id/button"
    android:onClick="buttonPress (MainActivity)" />

非常感谢任何帮助!!

5 个答案:

答案 0 :(得分:2)

简单。你应该写:

android:onClick="buttonPress"

为什么会发生

如果您撰写buttonPress (MainActivity),Android会尝试查找buttonPress (MainActivity)方法(而不是MainActivity.buttonPress()),但MainActivity没有buttonPress (MainActivity)方法。所以错误发生了。

答案 1 :(得分:1)

只需在按钮

中替换此标签即可

删除此

android:onClick="buttonPress (MainActivity)"

并粘贴此

android:onClick="buttonPress"

答案 2 :(得分:1)

更好的方法是,使用findViewById()方法获取Java代码中的按钮,并为该按钮设置OnClickListener

对于您当前的问题,请使用

android:onClick="buttonPress"

而不是

android:onClick="buttonPress (MainActivity)"

答案 3 :(得分:0)

根据我这是设置点击按钮的更好方法

public class MainActivity extends AppCompatActivity {

    public Button melButtonCode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        melButtonCode = (Button).findViewById(R.id.button);//find button by Id
        melButtonCode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                melButtonCode.setText("Has been clicked!");
            }
        });
    }
}

为您的问题

替换

android:onClick="buttonPress (MainActivity)"

。通过

android:onClick="buttonPress"

答案 4 :(得分:0)

使方法公共保护在您处于instantrun模式时起作用,但在不在时则不起作用。不知道为什么!