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

问题描述:

我是全新的Android Studio,无论出于何种原因遇到真正奇怪的错误,如果我能得到一些帮助。Android Studio - 按钮点击崩溃(简单)

我有非常基本的代码,应该点击按钮将我的按钮的文本从“按钮”更改为“单击!”。然而,每当我按下按钮,应用程序崩溃,我在模拟器上得到“Appname has stopped”。

什么是令人难以置信的奇怪的是,在我的activity_main.xml中设计视图,在下拉菜单的onClick显示相同的名称(https://puu.sh/t2h5I/42ad4379d6.png

^h H但是代码的两个函数仅选择一个底部时的作品。并且每次运行应用程序时,它都会取消选择最下面的一个,然后重新选择顶部,以停止工作。

这里是我的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

请分享崩溃报告 –

+0

你在哪里调用buttonPress函数? –

+0

使用onclicklistner而不是onclick,并显示烤面包或您的按钮上的任何东西点击像这样: –

按钮只需更换该标签

删除此

android:onClick="buttonPress (MainActivity)" 

并粘贴此

android:onClick="buttonPress" 

据我这是更好的方式来设置点击按钮

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" 

一个更好的办法来做到这一点是,获取到按钮的引用y我们的Java代码使用findViewById()方法并将OnClickListener设置为按钮。

对于当前的问题,使用

android:onClick="buttonPress" 

,而不是

android:onClick="buttonPress (MainActivity)" 

简单。你应该写:

android:onClick="buttonPress" 

为什么发生

如果你写buttonPress (MainActivity),安卓试图找到buttonPress (MainActivity)方法(不MainActivity.buttonPress()),但MainActivity没有buttonPress (MainActivity)方法。所以错误发生了。

当你处于即时模式时,使方法公开保护起作用,但不是时。不知道为什么!

+0

_这种方法应该公开吗? – Landschaft

+0

考虑添加一些代码来描述公开哪种方法。 –