2016-12-08 30 views
0

私の親アクティビティには、3つのフラグメントをホストするViewPagerが含まれています。MvvmCross + Xamarin.Android:ViewPager内のCardView内でMvxRecyclerViewを設定する方法は?

MAINVIEW:

<CoordinatorLayout> 
    <AppBarLayout/> 
    <ViewPager/> 
</CoordinatorLayout> 

つのフラグメントでは、私はアイテムとして

子供フラグメントCardViewsを表示RecyclerView持っている:私はそれぞれの子が欲しい子フラグメント内

<CoordinatorLayout> 
    <MvxSwipeRefreshLayout> 
     <MvxRecyclerView 
      local:MvxItemTemplate="@layout/child_item"> 
    </MvxSwipeRefreshLayout> 
</CoordinatorLayout> 

を(A 1)その子を水平方向に表示し、2)スクロール可能であることを示すRecyclerViewをホストすることができます。しかし、問題は、layoutManagerとorientation値をXMLで設定しても、動作しないということです。物事を垂直に表示し、スクロールしません。

Child_item

<CardView> 
    <MvxRecyclerView 
    local:layoutManager="android.support.v7.widget.LinearLayoutManager" 
    android:orientation="horizontal" 
    local:MvxItemTemplate="@layout/child_child" 
    android:background="@color/Red"/> 

</CardView> 

Cardviewのchild_child.xml内部の子アイテム:

<LinearLayout android:background="@color/Grey"> 
    <Button> 
</LinearLayout> 

現在、メインViewPagerが正常に動作します。私は断片を変更するためにスワイプすることができます。子フラグメントは垂直スクロールもサポートしています。私はスクロールしなければならないように複数のカードビューを追加しようとしました。 cardviewの内部では、子要素がタッチ入力を受け取っているかどうかを確認するためにSeekbarを追加しました。カード内のRecyclerViewのみがタッチ入力を受信して​​いないか、向き=水平要求に応答していません。

現在の状況:「XXXXX」ボタンは縦に積み重ねられています。 2つ以上の「XXXX」ボタンがあることに注意してください。カードビューはそれをクリップしましたが、スクロールしません。 screenshot of current state

私が達成しようとしていること:ボタンは水平に積み重ねてスクロールする必要があります。

答えて

0

MvvmCross 4.4.0のMvxRecyclerViewには、XMLの属性を無視し、デフォルトのLinearLayoutManagerを単にハードコードするバグがあります。 GitHub issueのさらなる開発。

当分の間、このユースケースでは、MvxRecyclerViewサブクラスをSetLayoutManager(new LinearLayoutManager(context) { Orientation = Horizontal });にハードコードしています。これは機能します。

[Register("bug.droid.components.BugFixRecyclerView")] 
public sealed class BugFixRecyclerView : MvxRecyclerView 
{ 
    public BugFixRecyclerView(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) 
    { 
    } 

    public BugFixRecyclerView(Context context, IAttributeSet attrs) : this(context, attrs, 0, new MvxRecyclerAdapter()) 
    { 
    } 

    public BugFixRecyclerView(Context context, IAttributeSet attrs, int defStyle) : this(context, attrs, defStyle, new MvxRecyclerAdapter()) 
    { 
    } 

    public BugFixRecyclerView(Context context, IAttributeSet attrs, int defStyle, IMvxRecyclerAdapter adapter) : base(context, attrs, defStyle, adapter) 
    { 
     if (adapter == null) 
      return; 

     var layoutManager = new LinearLayoutManager(context) { Orientation = Horizontal }; 
     SetLayoutManager(layoutManager);    

     var itemTemplateId = MvxAttributeHelpers.ReadListItemTemplateId(context, attrs); 
     var itemTemplateSelector = MvxRecyclerViewAttributeExtensions.BuildItemTemplateSelector(context, attrs); 

     adapter.ItemTemplateSelector = itemTemplateSelector; 
     Adapter = adapter; 

     if (itemTemplateSelector.GetType() == typeof(MvxDefaultTemplateSelector)) 
      ItemTemplateId = itemTemplateId; 
    } 
} 

CardViewのRecyclerViewでは、このサブクラスを使用するためにデフォルトのMvxRecyclerViewを置き換えます。

関連する問題