[英]Different adapter in items of recyclerview
我正在创建一个包含不同类型视图的列表。 就像facebook在移动应用程序中显示其提要一样 。 示例有时滚动视图或有时在列表中列出。
为此,这将是一个不错的选择。 如果我在recyclerview的每个项目中添加一个片段怎么办。 喜欢
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<fragment
android:layout_width="match_parent"
android:name="com.profile.EditProfileFragment"
android:layout_height="wrap_content"/>
并将其添加为Reclycleview中的一项,并在其中保留不同的逻辑。
谁能建议我如何解决这个问题。
我不认为将Fragment用作一行是不可能的。 片段有自己的生命周期,我不在RecyclerView可以控制的范围之内。 但是您可以通过简单的视图来完成。
只需重写RecyclerView.Adapter中的几种方法
private ArrayList<Data> items = new ArrayList<>(); // data associated
// with each row
@Override
public int getItemViewType(int position) {
return items.get(position).getRowType();
// assuming this is the getter to get the type
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case Data.TYPE_A:
View convertView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_feed, parent, false);
return new ViewHolderTypeA(convertView);
case Data.TYPE_B:
...
default:
return null;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Data data = items.get(position);
if (holder instanceof ViewHolderTypeA) {
ViewHolderTypeA holderA= (ViewHolderTypeA) holder;
// manipulate the views in view holder for this type
...
}else if (holder instanceof ViewHolderTypeB){
}
}
编辑:您不需要为每个项目使用不同的适配器。 您只需要包含所有逻辑的项目。 因此,如果您要具有两种行类型,一种用于状态,一种用于诸如Facebook feed的照片,则您的项目将是:
class Data {
String status, photoUrl;
}
当然,某些成员将根据行而为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.