recyclerview嵌套recyclerview比较好的解决方案

发布于 2022-09-04 19:10:36 字数 193 浏览 17 评论 0

像这种需要recyclerview嵌套recyclerview的情况有没有比较好的解决方案
clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我一直都在从未离去 2022-09-11 19:10:36

为何我看到的第一印象是流式布局 FlowLayoutGitHub 流式布局,Google出来的

你动态的 addView() 也是可以做到的

南街九尾狐 2022-09-11 19:10:36

同求,之前我有类似需求的时候,如果内容不是太多,会在内嵌套一个list/recycler View并抛掉所有触摸事件避免滑动冲突,着实是不太优雅。

梦巷 2022-09-11 19:10:36

在我看来这不是recyclerView嵌套recyclerView 一个recyclerView就可以搞定 只是要显示不同的list的数据和不同的item,我的思路是新建一个baseModel 两个数据源的bean 继承于baseModel,还是看代码 说是说不清楚

public class ModelBase {

    public int BEAN_SORT = -1;
    public int BEAN_TYPE = -1;
}

  public class AnimalModel extends ModelBase {

    private long id;
    private String name;
    private int age;
    private String address;
    }

public class PersonModel extends ModelBase {

private long id;
private String name;
private int age;
}

public class MainActivity extends AppCompatActivity {

    RecyclerView rvModel;
    private ArrayList<ModelBase> list;

    private enum BASE_TYPE {
        TYPE_PERSON, TYPE_ANIMAL
    }

    private ModelAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rvModel = (RecyclerView) findViewById(R.id.recycler_view);
        list = new ArrayList<ModelBase>();
        rvModel.setLayoutManager(new LinearLayoutManager(this));
        bindData();
        adapter = new ModelAdapter();
        rvModel.setAdapter(adapter);
    }

    private void bindData() {
        PersonModel person1 = new PersonModel(1, "大白", 25, "2017-02-13");
        list.add(person1);
        PersonModel person2 = new PersonModel(2, "二白", 25, "2018-06-21");
        list.add(person2);
        AnimalModel animal1 = new AnimalModel(1, "兔子", 2, "", "2016-03-15");
        list.add(animal1);
        AnimalModel animal2 = new AnimalModel(1, "兔子2", 2, "森林", "2019-02-14");
        list.add(animal2);
        PersonModel person3 = new PersonModel(3, "三白", 25, "2017-03-18");
        list.add(person3);
        AnimalModel animal3 = new AnimalModel(1, "兔子3", 2, "森林", "2015-03-15");
        list.add(animal3);
        PersonModel person4 = new PersonModel(4, "四白", 25, "2015-03-28");
        list.add(person4);
        PersonModel person5 = new PersonModel(5, "小白", 25, "2016-05-15");
        list.add(person5);
        AnimalModel animal4 = new AnimalModel(1, "兔子4", 2, "森林", "2014-03-14");
        list.add(animal4);
        Collections.sort(list, new Comparator<ModelBase>() {
            @Override
            public int compare(ModelBase model1, ModelBase model2) {
                return model2.data.compareTo(model1.data);
            }
        });  // 排序
    }

    class ModelAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType == BASE_TYPE.TYPE_PERSON.ordinal()) {
                return new PersonViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_person, parent, false));
            } else if (viewType == BASE_TYPE.TYPE_ANIMAL.ordinal()) {
                return new AnimalViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_animal, parent, false));
            }
            return null;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if (holder instanceof PersonViewHolder) {
                ((PersonViewHolder) holder).tvPerson.setText(((PersonModel) list.get(position)).getName());
            }
            if (holder instanceof AnimalViewHolder) {
                ((AnimalViewHolder) holder).tvAnimal.setText(((AnimalModel) list.get(position)).getName());
            }
        }

        @Override
        public int getItemCount() {
            return list.size();
        }

        @Override
        public int getItemViewType(int position) {
            if (list.get(position).BEAN_TYPE == 1) {
                return BASE_TYPE.TYPE_PERSON.ordinal();
            } else if (list.get(position).BEAN_TYPE == 2) {
                return BASE_TYPE.TYPE_ANIMAL.ordinal();
            }
            return 0;
        }

        class PersonViewHolder extends RecyclerView.ViewHolder {
            TextView tvPerson;

            public PersonViewHolder(View itemView) {
                super(itemView);
                tvPerson = (TextView) itemView.findViewById(R.id.tv_person);
            }
        }

        class AnimalViewHolder extends RecyclerView.ViewHolder {
            TextView tvAnimal;

            public AnimalViewHolder(View itemView) {
                super(itemView);
                tvAnimal = (TextView) itemView.findViewById(R.id.tv_animal);
            }
        }
    }
你可以照着列子敲一下 bean省去了set和get方法 布局文件也是很简单

蓦然回首 2022-09-11 19:10:36

用expandListView 干嘛非要用recyclerView

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文