一个ListView中的不同模式



想做

它能在ListView中显示两种列表吗?

现在,我显示了一个日志(列表(模式,但我必须在同一页上再显示一个新模式。所以我需要在同一页上显示两种列表模式。我使用了ListView和BaseAdapter,但我不知道要显示2个模式。

如果数据包括C,则显示图案1,如果数据包括G,则显示样式2。

【图片】

ーーーーーー

A、 B、C

D、 E、F

ーーーーーー

A、 B、G

D、 H、I、J

ーーーーーー

A、 B、C

D、 E、F

ーーーーーー

A、 B、C

D、 E、F

ーーーーーー

A、 B、G

D、 H、I、J

ーーーーーー

您可以尝试使用RecyclerView来实现这一点。

RecyclerView有多个ViewHolders时,我们通常会覆盖GetItemViewType方法。

getItemViewType(int position)

此方法的默认实现将始终返回0,表示只有1种类型的视图。在您的情况下,情况并非如此,因此您需要找到一种方法来断言哪一行对应于哪一种视图类型。

此外,当我们注意到以下方法的viewType参数时:

public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)

根据视图类型,我们需要扩大正确的布局资源,并相应地创建视图持有者。RecyclerView将以避免不同视图类型冲突的方式处理不同视图类型的回收。

例如:(假设您可以将看门人与对象的字段Type相匹配(

private  const int LAYOUT_ONE = 0;
private  const int LAYOUT_TWO = 1;

方法GetItemViewType:

public override int GetItemViewType(int position)
{
if (items[position].Type == 0)
return LAYOUT_ONE;
else
return LAYOUT_TWO;
}

方法OnCreateViewHolder

public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View view = null;
switch (viewType)
{
case LAYOUT_ONE:
view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.customview_user_writepostbar, parent, false);
return new CreatePostViewHolder(view);
case LAYOUT_TWO:
view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.customview_postregular, parent, false);
return new PostRegularViewHolder(view);
}
}

方法OnBindViewHolder

public override void 
OnBindViewHolder (RecyclerView.ViewHolder holder, int position)
{
int type = GetItemViewType(position);
switch (type)
{
case LAYOUT_ONE:
CreatePostViewHolder vh2 = holder as CreatePostViewHolder;
vh2.userFirstName.Text = UserFirstName + ", share something inspiring!";
break;
case LAYOUT_TWO:
PostRegularViewHolder vh = holder as PostRegularViewHolder;
// other code
break;
default:
break;
}
}

相关内容

  • 没有找到相关文章

最新更新