我有一个包含recyclerview的片段。此recyclerview使用数据绑定绑定到我的viewmodel。
问题;尝试启动片段时出现以下异常:
FATAL EXCEPTION: main
Process: no.inforte.demo, PID: 3134
java.lang.IllegalArgumentException: No view found for id 0x7f0d0074 (no.inforte.demo:id/content_frame) for fragment CategoryListFragment2{6db9671 #1 id=0x7f0d0074 CATEGORYLISTFRAGMENT}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1059)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
...
...
错误正确表明'content_frame'不存在。此视图位于MainActivity.java类的布局中,作为我的片段容器。
由于我使用数据绑定,我使用DataBindingUtil.setContentView方法:
private void initDataBinding() {
Log.d(TAG, "initDataBinding");
mCategoryListFragmentBinding = DataBindingUtil.setContentView(getActivity(), R.layout.category_list_fragment);
mCategoryListViewModel = new CategoryListViewModel(mCategoryListView, getContext());
mCategoryListFragmentBinding.setCategoryListViewModel(mCategoryListViewModel);
}
如何解决?
更多信息:
这是我从MainActivity中启动此片段的方式:
CategoryListFragment2 categoryListFragment = new CategoryListFragment2();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, categoryListFragment, FRAGMENT_TAG_CATEGORYLIST)
.commit();
getSupportFragmentManager().executePendingTransactions();
这是我的片段布局:
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="no.inforte.demo.ui.fragment.CategoryListFragment2">
<data>
<variable
name="categoryListViewModel"
type="no.inforte.demo.ui.viewmodel.CategoryListViewModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/category_list"
android:name="no.inforte.demo.ui.fragment.CategoryListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
app:layoutManager="LinearLayoutManager"
tools:context="no.inforte.demo.ui.fragment.CategoryListFragment"
tools:listitem="@layout/rowlayout_category_list">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</layout>
答案 0 :(得分:1)
我也遇到了这个问题,并使用DataBindingUtil.inflate方法找到了解决方案。 你所做的一切都是正确的,除了你的initDataBinding方法应该删除并替换如下:
在你的片段类(扩展片段的那个)中,你需要覆盖onCreateView方法并执行此操作:
@IBAction func tagLocationBtn(_ sender: Any) {
var annotationArray = [MKAnnotation]()
let annotation = MKPointAnnotation()
var coordinate: CLLocationCoordinate2D?
if myLatitude != nil && myLongitude != nil {
ref?.child("Latitude").childByAutoId().setValue(myLatitude)
ref?.child("Longitude").childByAutoId().setValue(myLongitude)
}
if latitude != nil && longitude != nil {
coordinate = CLLocationCoordinate2DMake(latitude!, longitude!)
annotation.coordinate = coordinate!
annotationArray.append(annotation)
mapView.addAnnotations(annotationArray)
}
一旦你这样做,你的数据绑定将正常工作,你很高兴!
答案 1 :(得分:0)
在您共享的上述代码中找不到片段oncreateview。想想你还没有添加它,尝试在你刚刚在initDataBinding中创建的数据绑定视图中返回父视图。