2016-03-22 24 views
2

Geridönüşümünü içeren bir parçam var. Bu geri dönüşüm görüntüleyici, veri bağlamayı kullanarak benim viewmodel'ime bağlı.Fragment içindeki Android veri bağlama - IllegalArgumentException: Görüntüleme yok

Problem;

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) 
    ... 
    ... 

hata durumları doğru 'content_frame' var olmadığını: Ben parçasını başlatmaya çalışırken aşağıdaki istisna almak. Bu görünüm, MainActivity.java sınıfının düzeninde, benim parça kapsayıcım olarak.

ben DataBindingUtil.setContentView yöntemi kullanmak bağlama verileri kullandığım için:

private void initDataBinding() { 
    Log.d(TAG, "initDataBinding"); 
    mCategoryListFragmentBinding = DataBindingUtil.setContentView(getActivity(), R.layout.category_list_fragment); 
    mCategoryListViewModel = new CategoryListViewModel(mCategoryListView, getContext()); 
    mCategoryListFragmentBinding.setCategoryListViewModel(mCategoryListViewModel); 
} 

Nasıl çözülür?

diğer bilgiler: içinde oncreateview

<?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> 
+1

Bu sorunu nasıl çözdünüz? –

cevap

1

Bu soruna da girdim ve DataBindingUtil.inflate yöntemini kullanarak çözümü buldum.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    CategoryListFragmentBinding binding = DataBindingUtil.inflate(inflater, R.layout.category_list_fragment , container, false); 
    binding.setViewModel(new CategoryListViewModel()); 
    return binding.getRoot(); 
} 
:

sizin parçası sınıfı (Fragment uzanan bir) olarak

, sen onCreateView yöntemini geçersiz ve bunu yapmak gerekir: aşağıdaki gibi initDataBinding yöntemi çıkarılıp değiştirilmesi gerektiğini hariç yaptığını herşey doğrudur

Bunu yaptıktan sonra, veri bağlayıcınız düzgün bir şekilde çalışacak ve siz de gitmeniz iyi olacak!

0

fragman bulunamadı:

CategoryListFragment2 categoryListFragment = new CategoryListFragment2(); 
    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.content_frame, categoryListFragment, FRAGMENT_TAG_CATEGORYLIST) 
      .commit(); 
getSupportFragmentManager().executePendingTransactions(); 

Bu benim parçası düzeni: Ben MainActivity bu parçayı başlatmak nasıl

budur paylaştığınız yukarıdaki kod. Henüz eklemediyseniz, initDataBinding'de oluşturduğunuz veri bağlama görünümünde ana görünümü döndürmeyi deneyin.

İlgili konular