2016-03-27 17 views
0

Big Nerd Ranch kılavuzunun 3. bölümünde, varsayılan ve yatay görünümlerin nasıl farklı şekilde düzenleneceğini açıklarlar. Ancak, Yatay yönlendirmeyle bir Android Kaynak Dizini oluşturduğumda ve aynı mizanpajı/mizanpaja aynı .xml kopyalayıp ikincisine değişiklikler yaptığımda, yatay modda döndüğümde uygulama fiziksel aygıtımın üzerine çöker.Maalesef, Uygulama, Android'deki düzen-arazi dosyasında .xml değerinde değişiklikler yaparken fiziksel aygıtta durdu

Kopyalanan .xml içindeki/layout-land dosyasında hiçbir şey değiştirmezsem, döndürüldüğünde kesinlikle iyi çalışır.

activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" 
    > 

    <TextView 
     android:id="@+id/question_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="24dp" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/true_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/true_button"/> 

     <Button 
      android:id="@+id/false_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/false_button"/> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 

     <Button 
      android:id="@+id/prev_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/prev_button"/> 

     <Button 
      android:id="@+id/next_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/next_button"/> 
    </LinearLayout> 



</LinearLayout> 

/layout-land/activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" 
    > 

    <TextView 
     android:id="@+id/question_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="24dp" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/true_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/true_button"/> 

     <Button 
      android:id="@+id/false_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/false_button"/> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 

     <Button 
      android:id="@+id/prev_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/prev_button"/> 

    </LinearLayout> 



</LinearLayout> 

Logcat

FATAL EXCEPTION: main 
                      Process: com.bignerdranch.android.geoquiz, PID: 5727 
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bignerdranch.android.geoquiz/com.bignerdranch.android.geoquiz.QuizActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 
                        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4378) 
                        at android.app.ActivityThread.access$1000(ActivityThread.java:177) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5910) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
                        at com.bignerdranch.android.geoquiz.QuizActivity.onCreate(QuizActivity.java:81) 
                        at android.app.Activity.performCreate(Activity.java:6178) 
                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769)  
                        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4378)  
                        at android.app.ActivityThread.access$1000(ActivityThread.java:177)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5910)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at java.lang.reflect.Method.invoke(Method.java:372) 

Sorunun ne olduğunu çözemiyor.

+0

Logcat'inizi yayınlayın veya muhtemelen kendiniz çözebileceksin –

+1

stacktrace'i gönderene kadar çözemeyiz! –

+0

Peyzaj düzeninizde 'next_button'' Button' eksik. Bir başvuru almak için 'findViewById()' kullanıyorsanız, null döndürür ve üzerinde herhangi bir yöntem çağrılması bir 'NullPointerException' ile sonuçlanır. –

cevap

0

Sen farklı görünebilir farklı düzen dosyaları olabilir yardımcı olabilir, ancak (örneğin sonraki düğme gibi) var olmayan görünümlerde findViewById kullanıyorsanız aramak gittiğinizde, o zaman bir NullPointerException alırsınız Lütfen Bu görünümdeki herhangi bir yöntem (hata durumunda, tıklama dinleyicisi atamak gibi).

Basit çözüm, her iki düzende de tüm görünümleri aynı kimliklerle tutmak, ancak bunları yönlendirmeye göre yeniden düzenlemek.

+0

Bunu görebildiğiniz gibi, .xml dosyalarındaki tüm görünümlerin aynı kimlikleri vardır. – Chaki

+0

Sorunuzda ne yazdığınızı tekrar kontrol etmek isteyebilirsiniz. Bir sonraki buton kesinlikle eksik –

İlgili konular