XamarinとMvvmCrossを使用してAndroidのタブに問題があります。最初のスタートではすべてが完璧ですが、問題は移動して戻ったときに発生します。タブのレイアウトを含むフラグメントに戻ると、空白になり、スワイプが始まるまでページが再び作成されます。MvvmCrossナビゲーションのフラグメントブレーク内のタブ
これは単にAdapter.NotifyDataSetChanged()を呼び出すことで修正できることを示していますが、そうではありません。最初に作成したときに実行される同じコードが、ビューに戻ると実行されます。
私のコードはthis sampleのように正確に設定されています。唯一の違いは、MainViewにタブが含まれていない点です。これはタブレイアウトを含むFragmentFrameに配置される子フラグメントの1つです。
マイセットアップ
XamarinとMvvmCrossを使用して、基本的なAndroidの断片のセットアップ。私はそれにフラグメントフレームを持つコンテナビューを持っています。すべての私のフラグメントは、それを含むviewmodelを示すMvxFragments、それを含むフレームのidを示すMvxFragmentsです。私はデフォルトのAndroidFragmentPresenterを使用します。
誰もこれまでに経験したことがありますか?ここで私は試してみましたいくつかのものです:
UIスレッド上にすべてのページャとアダプタのセットアップを動かし
を現在のアダプタが
nullの場合にのみ、新しいアダプタを作成し、設定をOnViewCreated
3と一緒に、アダプタのGetItemPositionをオーバーライドして、PositionNoneを返してすべてのアイテムをリロードしました。
スクロールを強制的に復帰上の別のインデックスにページインデックスを設定が、真ん中の1が再び
DestroyView
上に配置さ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;
}