2015-06-17 3 views
5

Wenn ich include Tag in einem Nicht-Root-Element in meiner XML-Datei mit Android Data Binding Tag verwenden, stürzt app. Aber die App funktioniert gut, wenn das include-Tag im Stammelement oder ohne Datenbindung Dinge platziert wird.Android Data Binding macht App bei Verwendung von Include-Tag in einem nicht root ViewGroup

Hier ist mein Quellcode, kann mir jemand helfen, den Grund herauszufinden?

activity_main.xml

<layout> 

    <LinearLayout 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" 
     android:orientation="vertical" 
     tools:context=".MainActivity"> 


     <TextView 
      android:id="@+id/text_view" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/hello_world" /> 

     <LinearLayout 

      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <include layout="@layout/include_layout" /> 

     </LinearLayout> 
    </LinearLayout> 
</layout> 

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); 
     binding.textView.setText("hello world"); 
    } 
} 

Stack-Trace

I/ActivityManager(13254): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.liangfeizc.databindings/.MainActivity (has extras)} from uid 10008 on display 0 
I/ActivityManager(13254): Start proc com.liangfeizc.databindings for activity com.liangfeizc.databindings/.MainActivity: pid=18181 uid=10065 gids={50065, 9997} abi=x86 
I/art  (18181): Not late-enabling -Xcheck:jni (already on) 
D/AndroidRuntime(18181): Shutting down VM 
E/AndroidRuntime(18181): FATAL EXCEPTION: main 
E/AndroidRuntime(18181): Process: com.liangfeizc.databindings, PID: 18181 
E/AndroidRuntime(18181): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.liangfeizc.databindings/com.liangfeizc.databindings.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setTag(java.lang.Object)' on a null object reference 
E/AndroidRuntime(18181): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
E/AndroidRuntime(18181): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
E/AndroidRuntime(18181): at android.app.ActivityThread.access$800(ActivityThread.java:144) 
E/AndroidRuntime(18181): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
E/AndroidRuntime(18181): at android.os.Handler.dispatchMessage(Handler.java:102) 
E/AndroidRuntime(18181): at android.os.Looper.loop(Looper.java:135) 
E/AndroidRuntime(18181): at android.app.ActivityThread.main(ActivityThread.java:5221) 
E/AndroidRuntime(18181): at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime(18181): at java.lang.reflect.Method.invoke(Method.java:372) 
E/AndroidRuntime(18181): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
E/AndroidRuntime(18181): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
E/AndroidRuntime(18181): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setTag(java.lang.Object)' on a null object reference 
E/AndroidRuntime(18181): at com.liangfeizc.databindings.databinding.ActivityMainBinding.<init>(ActivityMainBinding.java:27) 
E/AndroidRuntime(18181): at com.liangfeizc.databindings.databinding.ActivityMainBinding.bind(ActivityMainBinding.java:88) 
E/AndroidRuntime(18181): at android.databinding.DataBinderMapper.getDataBinder(DataBinderMapper.java:14) 
E/AndroidRuntime(18181): at android.databinding.DataBindingUtil.bind(DataBindingUtil.java:107) 
E/AndroidRuntime(18181): at android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:68) 
E/AndroidRuntime(18181): at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:185) 
E/AndroidRuntime(18181): at com.liangfeizc.databindings.MainActivity.onCreate(MainActivity.java:18) 
E/AndroidRuntime(18181): at android.app.Activity.performCreate(Activity.java:5937) 
E/AndroidRuntime(18181): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
E/AndroidRuntime(18181): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
E/AndroidRuntime(18181): ... 10 more 
W/ActivityManager(13254): Force finishing activity com.liangfeizc.databindings/.MainActivity 
D/  (13254): HostConnection::get() New Host Connection established 0xa0a234d0, tid 13352 
+0

Fügen Sie die XML mit der Bindung hinzu – EE66

+0

Sorry, da wird 'Layout'-Tag hinzugefügt. –

+0

Könnte bitte ein Backtrace einfügen, das mit diesem Fehler zusammenhängt? – srain

Antwort

-3

Ich hatte Probleme mit dem Include-Tag, bevor es einen Fehler mit Ihrem Code gibt. Ich schlage vor, stattdessen Fragmente zu verwenden, die zuverlässig sind und einen besseren Weg zum Programmieren bieten. Erstellen Sie Ihre Dateien in Fragmente einschließlich und dann Fragment in Ihrem Layout-Datei aufrufen wie diese

<fragment android:name="your fragment here" 
      android:id="@+id/article_fragment" 
      android:layout_weight="2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 

ich Google für Fragmente schlagen schlagen und es wird in den Rest füllen.

+0

Du meinst ersetzen das 'include' mit einem' Fragment'? –

+0

ja erstellen Sie Ihre Dateien, die Sie in Fragmente aufnehmen und dann Fragment in Ihrer Layout-Datei wie diese –

+0

ich sehe. Vielen Dank. :) –

Verwandte Themen