当我点击按钮后尝试显示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);
}
});
}
}
正如我说的,它是所有崩溃。顺便说一下,我在模拟器中运行它。
答
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);
}
}
哪来的例外呢? – 2012-08-14 10:28:59