我是Android开发的新手,我遇到了这个奇怪的问题。根据我的布局顺序,应用程序可以完美运行,或者只是在打开之前崩溃。
我的java代码:
package com.exmple.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;
public class HelloAndroid extends Activity{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// According to logcat. Below is the error line
Button myButton = (Button) findViewById(R.id.button1);
myButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(HelloAndroid.this, "ImageButton clicked!", Toast.LENGTH_SHORT).show();
}
});
}
}
布局XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text1" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text1" />
</LinearLayout>
字符串XML:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="text1">This is the first text!</string>
<string name="text2">This is the second text!</string>
<string name="app_name">Hello, Android</string>
</resources>
问题:如果我将textview移到按钮上方,程序就会崩溃。我不明白为什么会这样。
所以:我是否迟钝或者问题是什么?
============================= 我测试了问题,是的,有问题,这是lgocat
02-02 02:33:00.433: E/AndroidRuntime(2729): FATAL EXCEPTION: main
02-02 02:33:00.433: E/AndroidRuntime(2729): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.android.testing/com.my.android.testing.HelloAndroid}: java.lang.ClassCastException: android.widget.TextView
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.os.Looper.loop(Looper.java:130)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-02 02:33:00.433: E/AndroidRuntime(2729): at java.lang.reflect.Method.invokeNative(Native Method)
02-02 02:33:00.433: E/AndroidRuntime(2729): at java.lang.reflect.Method.invoke(Method.java:507)
02-02 02:33:00.433: E/AndroidRuntime(2729): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-02 02:33:00.433: E/AndroidRuntime(2729): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-02 02:33:00.433: E/AndroidRuntime(2729): at dalvik.system.NativeStart.main(Native Method)
02-02 02:33:00.433: E/AndroidRuntime(2729): Caused by: java.lang.ClassCastException: android.widget.TextView
02-02 02:33:00.433: E/AndroidRuntime(2729): at com.my.android.testing.TestAndActivity.onCreate(HelloAndroid.java:16)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-02 02:33:00.433: E/AndroidRuntime(2729): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-02 02:33:00.433: E/AndroidRuntime(2729): ... 11 more
答案 0 :(得分:5)
清理你的项目将解决你的问题。
答案 1 :(得分:1)
我运行你的代码,你是正确的我给予和例外我们在按钮之前移动TextView。很奇怪。但我发现它实际上是一些id问题。当我将TextView移动到其工作状态后更改Id。但我没有理由这样做。
可能会有一个击球手知道。但你也可以通过链接id的视图来尝试。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/main_id_text_my"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text2" />
<Button
android:id="@+id/main_id_btn_my"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text1" />
</LinearLayout>
以及活动代码。
Button myButton = (Button) findViewById(R.id.main_id_btn_my);
myButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(TestAndActivity.this, "ImageButton clicked!", Toast.LENGTH_SHORT).show();
}
});
另外,不要忘记清理和构建项目
答案 2 :(得分:0)
移动TextView的位置时需要小心。如果在将TextView移动到其他位置后不更改TextView的ID,则可能会导致应用程序崩溃。
我不知道为什么会发生这种情况,但更改ID会解决这个崩溃的问题。