2012-02-01 2 views
1

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

очистить весь проект и построить его снова! надеюсь, он исправит – waqaslam

+2

Пожалуйста, поделитесь своим логарифмом. При сбое приложения. – Arslan

+0

Хм, работы по уборке и восстановлению! – Kirken

ответ

5

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

1

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

Может быть известно одному тесту. Но вы также можете попытаться связать идентификатор просмотров.

<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

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

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