2016-11-07 10 views
0

での活動にバインド私は私のプロジェクトの一つでData Binding Libraryを使用したいが、私はMapFragmentを持って活動にエラーを取得しています。コードは完璧に動作libreryデータバインディングを使用していないデータはMapFragment

私のxml main_activityファイル:

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools"> 

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

     <android.support.v7.widget.Toolbar 
      android:id="@+id/my_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:elevation="4dp" 
      android:theme="@style/ThemeOverlay.AppCompat.ActionBar" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

     <fragment 
      android:id="@+id/map" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tools:context="com.project.activities.MainActivity" /> 

    </RelativeLayout> 

</layout> 

および関連baseActivity

public abstract class BaseActivity extends AppCompatActivity { 

     private ActivityMainBinding binding; 
     private Toolbar toolbar; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      binding = DataBindingUtil.setContentView(this, getContentView()); 
      setContentView(getContentView());//Crashes 
      getPresenter(); 
      configureToolbar(); 
      Log.d(Constans.LOG_TAG,"On create"); 
     } 

     private void configureToolbar() { 

      toolbar = binding.myToolbar; 
      if (toolbar != null) { 
       setSupportActionBar(toolbar); 
       getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      } 

     } 


     @Override 
     protected void onStop() { 
      super.onStop(); 
      Log.d(Constans.LOG_TAG,"On Stop"); 

     } 

     @Override 
     protected void onResume() { 
      super.onResume(); 
      Log.d(Constans.LOG_TAG,"On resume"); 

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      return super.onCreateOptionsMenu(menu); 


     } 

     protected abstract int getContentView(); 
     protected abstract void getPresenter(); 

} 

そして、私が手にエラーがある:

javaの.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.project.activities.MainActivity}:android.view.InflateEx ception:バイナリXMLファイルライン#18:バイナリXMLファイルライン#18:クラスフラグメントを拡張するエラー android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2510)android.os.Handler.dispatchMessageでandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1363) でandroid.app.ActivityThread.-wrap11(ActivityThread.java) で (Handler.java:102 java.lang.rでandroid.app.ActivityThread.main(ActivityThread.java:5461) でandroid.os.Looper.loop(Looper.java:148) で) eflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) ) 原因:android.view.InflateException:バイナリXMLファイルライン#18:バイナリXMLファイルライン#18:android.view.LayoutInflater.inflateのクラスフラグメント を膨張させるエラー。android.viewの .LayoutInflater.inflate(LayoutInflater.java:423)android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)の とandroid.view.LayoutInflater.inflate(LayoutInflater.java:423)の (%)を返します。 Activity.java:6251)android.app.ActivityThread.handleLaunchActivityでandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2403) でandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) で(ActivityThread。 Javaの:2510) android.app.ActivityThread.-wrap11(ActivityThread.java) でandroid.app.ActivityThread $ H.handでandroid.app.ActivityThread.mainでleMessage android.os.Looper.loop(Looper.java:148)でandroid.os.Handler.dispatchMessage(Handler.java:102)で(ActivityThread.java:1363) ( java.lang.reflect.MethodオブジェクトでActivityThread.java:5461) 。(ネイティブメソッド)

を呼び出すエラー自体は

setContentView(getContentView())にのonCreate(バンドルsavedInstanceState)方法です。

私は間違っていますか?

答えて

2

setContentView(getContentView());//Crashes 

この行を削除し、あなたはそれがnullだながらContentViewを取得しようとしているので、

binding = DataBindingUtil.setContentView(this, R.id.main_activity); 
+1

私はちょうどあなたが私にこの時間とのトンを保存言いたいです! –

0

アプリのクラッシュにレイアウトリソースを渡します。 getContentViewを呼び出す前に、常にsetContentViewを呼び出す必要があります。

試してみてください。

setContentView(R.id.YOUR_LAYOUT_ID);//Crashes 
binding = DataBindingUtil.setContentView(this, getContentView()); 
関連する問題