我正在尝试使用mvxrecyclerview。我直接从ViewModel及其重新列出了列表中直接捕捉了这些物品。但是我希望介于两者之间。因此,我制作了一个自定义的项目定位器,并将其与回收器视图一起使用。它用于Andorid 7.0,但不适用于棉花糖。我不为mvxrecyclerview分别使用任何持有人,linearlayoutmanager或适配器。请找到下面的代码
活动类//************************************************************************************************************************************//
[Activity(Label = "EmployeeHub", Theme = "@style/MaterialTheme", ScreenOrientation = AndroidSystem.Content.PM.ScreenOrientation.Portrait)]
public class EmployeeHub : BaseView
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.EmployeeHub);
var reclycleView = this.FindViewById<MvxRecyclerView>(Resource.Id.my_recycler_view);
AndroidSystem.Support.V7.Widget.RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecoration(this.ApplicationContext);
reclycleView.AddItemDecoration(dividerItemDecoration);
}
}
item -decorator//************************************************************************************************************************//
public class DividerItemDecoration : RecyclerView.ItemDecoration
{
private AndroidSystem.Graphics.Drawables.Drawable divider;
private int[] attributes = new int[] {Attribute.ListDivider };
public DividerItemDecoration(Context context)
{
divider = context.GetDrawable(Resource.Drawable.noBorder);
TypedArray ta = context.ObtainStyledAttributes(attributes);
divider = ta.GetDrawable(0);
ta.Recycle();
}
public override void GetItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)
{
if (parent.GetChildAdapterPosition(view) == 0)
{
return;
}
outRect.Top = divider.IntrinsicHeight;
}
public override void OnDraw(Canvas c, RecyclerView parent, RecyclerView.State state)
{
int left = parent.PaddingLeft;
int right = parent.Width - parent.PaddingRight;
for (int i = 0; i < parent.ChildCount; i++)
{
View child = parent.GetChildAt(i);
var parameters = child.LayoutParameters.JavaCast<RecyclerView.LayoutParams>();
int top = child.Bottom + parameters.BottomMargin;
int bottom = top + divider.IntrinsicHeight;
divider.SetBounds(left, top, right, bottom);
divider.Draw(c);
}
}
}
//布局***********************************************************************************************//
<MvxRecyclerView
android:id="@+id/my_recycler_view"
android:layout_below="@+id/hlhrview1"
android:scrollbars="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxItemTemplate="@layout/employee_item_template"
local:MvxBind="ItemsSource Employees; ItemClick SelectedEmployee" />
我也遇到了问题。有了来自此处的提示,对您的代码进行了一些修改,我就可以使其正常工作。具体来说,我使用的是 on Drawvover ,而不是 on Drawd
这是我修改的dividerItemdecoration:
public class DividerItemDecoration : RecyclerView.ItemDecoration
{
private readonly Drawable _divider;
public DividerItemDecoration(Context context)
{
_divider = ResourcesCompat.GetDrawable(context.Resources, Resource.Drawable.recyclerview_line_divider, context.Theme);
}
public override void OnDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)
{
var left = parent.PaddingLeft;
var right = parent.Width - parent.PaddingRight;
for (var i = 0; i < parent.ChildCount; i++)
{
var child = parent.GetChildAt(i);
var parameters = child.LayoutParameters.JavaCast<RecyclerView.LayoutParams>();
var top = child.Bottom + parameters.BottomMargin;
var bottom = top + _divider.IntrinsicHeight;
_divider.SetBounds(left, top, right, bottom);
_divider.Draw(c);
}
}
}
我还将绑定代码放在我的increateview中:
var reclycleView = _payformView.FindViewById<MvxRecyclerView>(Resource.Id.my_recycler_view);
RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecoration(Application.Context);
reclycleView.AddItemDecoration(dividerItemDecoration);
所有这些都在 kitkat 设备上。