当我点击按钮后尝试显示HelloWorld时,Android应用程序崩溃

问题描述:

我写了一个应该显示按钮的简单应用程序,单击该按钮时会显示文本:'Hello World' - 但是,正在做的事情正在崩溃。当我点击按钮后尝试显示HelloWorld时,Android应用程序崩溃

的XML是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/hello" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="" 
     tools:context=".GraphicsActivity" /> 

    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/button_send" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Write Something..." 
     android:onClick="writeMsg" /> 
</RelativeLayout> 

Android的源是在这里:

public class GraphicsActivity extends Activity { 

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

    public void WriteMsg() { 

     Button button = (Button) findViewById(R.id.button_send); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       TextView tv = (TextView) findViewById(R.id.hello); 
       tv.setText("Hello World"); 
       setContentView(tv); 
      } 
     }); 
    } 
} 

正如我说的,它是所有崩溃。顺便说一下,我在模拟器中运行它。

+1

哪来的例外呢? – 2012-08-14 10:28:59

public class GraphicsActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_graphics); 
     Button button = (Button) findViewById(R.id.button_send); 
     WriteMsg(); 
    } 

    public void WriteMsg() { 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       TextView tv = (TextView) findViewById(R.id.hello); 
       tv.setText("Hello World"); 
       setContentView(tv); 
      } 
     }); 
    } 
} 

试试这个

TextView tv = (TextView) findViewById(R.id.hello); 

写在你的onCreate() method.And使用Toast在`onClickListener()”按钮。

Toast.makeText(getApplicationContext(), "Discard", 10000).show(); 

这将帮助你

TextView tv = (TextView) findViewById(R.id.hello); 

试图找到按钮的文本视图,而不是在整个布局(如方法属于按钮)。 你应该这样做:

public void WriteMsg() { 

    Button button = (Button) findViewById(R.id.button_send); 
    final TextView tv = (TextView) findViewById(R.id.hello); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      tv.setText("Hello World"); 

     } 
    }); 

    } 

唯一的例外是在

安卓的onClick = “writeMsg”

,但你的活动有一个的onclick功能WriteMsg。将其更改为小写writeMsg。 你最有可能越来越没有找到方法例外

试试这个

public class GraphicsActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_graphics); 
     Button button = (Button) findViewById(R.id.button_send); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       TextView tv = (TextView) findViewById(R.id.hello); 
       tv.setText("Hello World"); 
      } 
     }); 
    } 
} 

有你的代码的几个问题。
a)首先,如果您决定将单击事件附加到XML代码的按钮上,则调用的方法应该带有View参数。

签名应该是这样的:

public void WriteMsg(View view) { 
} 

b)其次,该法的名称应符合什么样的onClick属性的值。
其实你有这样的XML:

android:onClick="writeMsg" 

,这是方法的declation:

public void WriteMsg() 

通知的第一个字母大写。

c)最后一个,没有必要在WriteMsg()方法中设置点击监听器到button_send。您已通过声明onClick属性附加了单击事件侦听器。这可能会导致其他问题。

因此,您要么删除onClick属性,要么删除在WriteMsg方法中为button_send设置侦听器的代码。

public class MainActivity extends Activity { 

public TextView tv; 
public Button btn_click; 

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

    btn_click = (Button) findViewById(R.id.button1); 
    tv = (TextView) findViewById(R.id.textView1); 

    btn_click.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      writeText("Text to display"); 
     } 
    }); 

} 

private void writeText(String string) { 
    tv.setText(string); 
} 

}