2017-07-19 24 views
0

XamarinとMvvmCrossを使用してAndroidのタブに問題があります。最初のスタートではすべてが完璧ですが、問題は移動して戻ったときに発生します。タブのレイアウトを含むフラグメントに戻ると、空白になり、スワイプが始まるまでページが再び作成されます。MvvmCrossナビゲーションのフラグメントブレーク内のタブ

これは単にAdapter.NotifyDataSetChanged()を呼び出すことで修正できることを示していますが、そうではありません。最初に作成したときに実行される同じコードが、ビューに戻ると実行されます。

私のコードはthis sampleのように正確に設定されています。唯一の違いは、MainViewにタブが含まれていない点です。これはタブレイアウトを含むFragmentFrameに配置される子フラグメントの1つです。

マイセットアップ

XamarinとMvvmCrossを使用して、基本的なAndroidの断片のセットアップ。私はそれにフラグメントフレームを持つコンテナビューを持っています。すべての私のフラグメントは、それを含むviewmodelを示すMvxFragments、それを含むフレームのidを示すMvxFragmentsです。私はデフォルトのAndroidFragmentPresenterを使用します。

誰もこれまでに経験したことがありますか?ここで私は試してみましたいくつかのものです:

  • UIスレッド上にすべてのページャとアダプタのセットアップを動かし

    1. を現在のアダプタが

    2. nullの場合にのみ、新しいアダプタを作成し、設定をOnViewCreated

    3. 3と一緒に、アダプタのGetItemPositionをオーバーライドして、PositionNoneを返してすべてのアイテムをリロードしました。

      スクロールを強制的に復帰上の別のインデックスにページインデックスを設定
    4. が、真ん中の1が再び

    5. DestroyView

    6. 上に配置さviewPager、アダプタとtabLayout作成されることはありませんので、私は唯一の3ページを持っています

    EDIT 1:私はこれが私の生産コードのストリップダウンバージョンである正確なシナリオhereの例を追加しました。 FABを押して、戻るボタンを使用すると、タブアダプタが空であることがわかります。それがバグです。

    自分のコードを追加して、そのレポを見たくない場合もあります。

    タブがフラグメント(レイアウト)

    <?xml version="1.0" encoding="utf-8"?> 
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:local="http://schemas.android.com/apk/res-auto" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:fitsSystemWindows="true"> 
        <android.support.design.widget.AppBarLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content"> 
         <android.support.v7.widget.CardView 
          android:layout_width="match_parent" 
          android:layout_height="60dp" 
          android:layout_margin="10dp" 
          android:gravity="center"> 
          <RelativeLayout 
           android:layout_width="match_parent" 
           android:layout_height="match_parent"> 
           <EditText 
            android:id="@+id/simple_search_edit_text" 
            android:layout_width="match_parent" 
            android:layout_height="60dp" 
            android:paddingLeft="70dp" 
            android:hint="New Search" 
            android:textColorHint="@color/light_grey" 
            android:background="#fff" 
            android:imeOptions="actionSearch" 
            android:inputType="text" 
            local:MvxBind="Text SearchText" /> 
           <ImageView 
            android:layout_width="30dp" 
            android:layout_height="30dp" 
            android:layout_marginLeft="20dp" 
            android:layout_centerVertical="true" 
            android:padding="3dp" 
            local:srcCompat="@drawable/mag_glass_gray" /> 
           <ImageView 
            android:layout_width="40dp" 
            android:layout_height="40dp" 
            android:layout_marginRight="20dp" 
            android:padding="8dp" 
            android:layout_alignParentRight="true" 
            android:layout_centerVertical="true" 
            local:srcCompat="@drawable/general_cog_icon" /> 
          </RelativeLayout> 
         </android.support.v7.widget.CardView> 
         <android.support.design.widget.TabLayout 
          android:id="@+id/main_tablayout" 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          style="@style/SampleTabsTabLayout" /> 
        </android.support.design.widget.AppBarLayout> 
        <android.support.v4.view.ViewPager 
         android:id="@+id/main_view_pager" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         local:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
        <RelativeLayout 
         android:layout_width="match_parent" 
         android:layout_height="match_parent"> 
         <Button 
          android:id="@+id/simple_search_advanced_search_btn" 
          android:layout_width="wrap_content" 
          android:layout_height="@dimen/simplesearch_advancedsearch_height" 
          android:layout_marginBottom="@dimen/simplesearch_advanced_search_margin_bottom" 
          android:layout_above="@+id/simple_search_fab" 
          android:layout_centerHorizontal="true" 
          android:gravity="center" 
          android:textSize="@dimen/simplesearch_advanced_search_text_size" 
          android:textColor="@color/foundit_blue" 
          android:background="@android:color/transparent" 
          local:MvxBind="Click AdvancedSearchCommand; Text AdvancedSearchButtonText" /> 
        <!-- Search Button --> 
         <android.support.design.widget.FloatingActionButton 
          android:id="@+id/simple_search_fab" 
          android:layout_width="@dimen/general_fab_dimensions" 
          android:layout_height="@dimen/general_fab_dimensions" 
          android:layout_marginBottom="@dimen/general_fab_margin_bottom" 
          android:padding="@dimen/simplesearch_fab_icon_padding" 
          android:layout_alignParentBottom="true" 
          android:layout_centerHorizontal="true" 
          android:scaleType="centerInside" 
          android:src="@drawable/general_search_icon" 
          local:MvxBind="Click SearchCommand" /> 
        </RelativeLayout> 
    </android.support.design.widget.CoordinatorLayout> 
    

    断片コードの表示

    // Pager and adapter setup 
    var fragments = GetTabFragments(); 
    var presenter = Mvx.Resolve<IMvxAndroidViewPresenter>() as AndroidViewPresenter; 
    _adapter = new SimpleSearchTabAdapter(Context, presenter.FragmentManager, fragments); 
    _fragmentPager.Adapter = _adapter; 
    
    _tabLayout.SetupWithViewPager(_fragmentPager); 
    
    // Just for completion sake of the code above  
    private List<MvxCachingFragmentStatePagerAdapter.FragmentInfo> GetTabFragments() 
    { 
        var fragments = new List<MvxCachingFragmentStatePagerAdapter.FragmentInfo>(); 
    
        foreach (var tabViewModel in ViewModel.TabViewModels) 
        fragments.Add(new MvxCachingFragmentStatePagerAdapter.FragmentInfo(GetTabNameFromViewModel(tabViewModel), 
                          GetViewTypeFromViewModel(tabViewModel), 
                          tabViewModel)); 
    
        return fragments; 
    } 
    
  • 答えて

    0

    だから、問題は、私が代わりにフラグメントを収容した活動のFragmentManagerを使用していたということでしたフラグメント内のChildFragmentManagerの

    便利な情報this answer

    関連する問題