我是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)" />
非常感谢任何帮助!!
答案 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模式时起作用,但在不在时则不起作用。不知道为什么!