我想在我的一个项目中使用数据绑定库,但我在有MapFragment的活动中得到错误。不使用数据绑定库,代码工作完美
My 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();
}
得到的错误是:
. lang。运行异常:无法启动活动ComponentInfo{com.project.activities。MainActivity}: android.view.InflateException:二进制XML文件行#18:二进制XML文件行#18:错误膨胀类片段android.app.ActivityThread.performLaunchActivity (ActivityThread.java: 2450)android.app.ActivityThread.handleLaunchActivity (ActivityThread.java: 2510)android.app.ActivityThread.-wrap11 (ActivityThread.java)android.app.ActivityThread H.handleMessage美元(ActivityThread.java: 1363)android.os.Handler.dispatchMessage (Handler.java: 102)android.os.Looper.loop (Looper.java: 148)android.app.ActivityThread.main (ActivityThread.java: 5461)在java.lang.reflect.Method。调用(本地方法)com.android.internal.os.ZygoteInit MethodAndArgsCaller.run美元(ZygoteInit.java: 726)com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 616)导致:android.view.InflateException:二进制XML文件行#18:二进制XML文件行#18:错误膨胀类片段android.view.LayoutInflater.inflate (LayoutInflater.java: 539)android.view.LayoutInflater.inflate (LayoutInflater.java: 423)android.view.LayoutInflater.inflate (LayoutInflater.java: 374)android.support.v7.app.AppCompatDelegateImplV9.setContentView (AppCompatDelegateImplV9.java: 284)android.support.v7.app.AppCompatActivity.setContentView (AppCompatActivity.java: 140)在com.project.activities.MainActivity.BaseActivity.onCreate (BaseActivity.java: 21)android.app.Activity.performCreate (Activity.java: 6251)android.app.Instrumentation.callActivityOnCreate (Instrumentation.java: 1108)android.app.ActivityThread.performLaunchActivity (ActivityThread.java: 2403)android.app.ActivityThread.handleLaunchActivity (ActivityThread.java: 2510)android.app.ActivityThread.-wrap11 (ActivityThread.java)android.app.ActivityThread H.handleMessage美元(ActivityThread.java: 1363)android.os.Handler.dispatchMessage (Handler.java: 102)android.os.Looper.loop (Looper.java: 148)android.app.ActivityThread.main (ActivityThread.java: 5461)在java.lang.reflect.Method。(本地方法调用)
错误本身在onCreate(Bundle savedInstanceState)方法在
setContentView (getContentView ());
我做错了什么?
删除这一行
setContentView(getContentView());//Crashes
并将布局资源传递给
binding = DataBindingUtil.setContentView(this, R.id.main_activity);
你的应用程序崩溃,因为你试图获得ContentView,而它是空的。在调用getContentView之前,你总是需要调用setContentView。
试题:
setContentView(R.id.YOUR_LAYOUT_ID);//Crashes
binding = DataBindingUtil.setContentView(this, getContentView());