我的父活动包含一个托管3个片段的ViewPager。
的MainView:
<CoordinatorLayout>
<AppBarLayout/>
<ViewPager/>
</CoordinatorLayout>
在一个片段中,我有一个RecyclerView,它将CardViews显示为项目
子片段:
<CoordinatorLayout>
<MvxSwipeRefreshLayout>
<MvxRecyclerView
local:MvxItemTemplate="@layout/child_item">
</MvxSwipeRefreshLayout>
</CoordinatorLayout>
在子片段中,我希望每个孩子(一个CardView)拥有自己的RecyclerView,1)水平显示其子项,2)可滚动。但问题是,即使我在XML中设置了layoutManager和方向值,它也不起作用。它垂直显示,不滚动。
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以便它必须滚动,我可以做到这一点。在cardview里面,我添加了一个Seekbar来查看子元素是否正在接收触摸输入,这也是有效的。只有卡内的RecyclerView没有接收任何触摸输入,或响应orientation =水平请求。
目前的情况:“XXXXX”按钮垂直堆叠。请注意,有超过2个“XXXX”按钮。卡片视图夹住它但不滚动。
我想要实现的目标是什么:按钮应该水平堆叠并且应该可滚动。
答案 0 :(得分: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以使用此子类。