繁体   English   中英

Recyclerview项目中的不同适配器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM