Изменение порядка кнопок и просмотра текста приводит к сбою моего приложения - PullRequest
1 голос
/ 02 февраля 2012

Я новичок в разработке для 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>

Проблема: если переместить текстовое представление над кнопкой, программа вылетает.Я не понимаю, почему это происходит.

Итак: я отсталый или в чем проблема?

============================ У меня есть проблема, и да, есть проблема, вот 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

Ответы [ 3 ]

5 голосов
/ 13 сентября 2012

очистить ваш проект решит вашу проблему.

1 голос
/ 02 февраля 2012

Я запускаю ваш код, и вы правы, что я дал, и, исключая его, мы перемещаем TextView перед кнопкой.Это было странноНо я обнаружил, что это была какая-то проблема с идентификацией.Как я меняю Id после перемещения TextView вверх и его работы.Но у меня нет причин для этого.

Может быть, кто-нибудь из тех, кто разбил, знает.Но вы также можете попробовать связать 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();
                    }
        });

Также не забудьте очистить и построить свой проект

0 голосов
/ 18 июня 2012

Вы должны быть осторожны при перемещении позиции TextView.Если вы не измените идентификатор TextView после его перемещения в другое место, вполне вероятно, что это может привести к сбою вашего приложения.

Я понятия не имею, почему это должно произойти, но изменение идентификатора решает эту проблему сбоя.

...