带有MapFragment的Activity中的数据绑定



我想在我的一个项目中使用数据绑定库,但我在有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());

最新更新