我是Android Studio的新手,无论出于何种原因,如果我能得到一些帮助。
我有一个非常基本的代码,应该在按钮上单击"按钮"的"按钮"更改"单击!"的文本。但是,每次按下按钮时,应用程序崩溃,并且我会在模拟器上获得" AppName已停止"。
令人难以置信的很奇怪的是,在我的Activity_main.xml设计视图中,OnClick下拉列表显示了两个相同名称的功能(https://puu.sh/t2h5i/42ad4379d6.png)
h atever仅在选择底部时才有效。每次运行应用程序时,都会取消选择底部并重新选择顶部,只是停止工作。
这是我的主要目的:
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)" />
任何帮助将不胜感激!
简单。您应该写:
android:onClick="buttonPress"
为什么发生
如果您编写了buttonPress (MainActivity)
,则Android尝试查找buttonPress (MainActivity)
方法(不是MainActivity.buttonPress()
),但是MainActivity没有buttonPress (MainActivity)
方法。因此发生了错误。
只需在按钮
中替换此标签删除此
android:onClick="buttonPress (MainActivity)"
并粘贴此
android:onClick="buttonPress"
一种更好的方法是,使用findViewById()
方法获取对Java代码中的按钮,然后将OnClickListener
设置为按钮。
对于您当前的问题,请使用
android:onClick="buttonPress"
而不是
android:onClick="buttonPress (MainActivity)"
根据我这是设置单击按钮
的更好方法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"
在您处于instantrun模式时,将方法公开 - 而不是在不进行时。不知道为什么!