Android:如何显示在点击时展开的分类视频缩略图列表?

Android: How can I display a list of categorised video thumbnails that expand on click?

首先我会告诉你我的想法。

CATEGORY 1
Video 1 | Video 2 | Video 3
Video 4 | Video 5 | Video 6

CATEGORY 2
Video 1 | Video 2 | Video 3
Video 4 | Video 5 | Video 6

实际上还有更多类别,但为了简短起见,我将其限制为两个。现在假设用户对类别 1 中的更多视频感兴趣,并且假设该类别中有 10 个视频。我希望视图是这样的:

CATEGORY 1
Video 1 | Video 2 | Video 3
Video 4 | Video 5 | Video 6
Video 7 | Video 8 | Video 9
Video 10

CATEGORY 2
Video 1 | Video 2 | Video 3
Video 4 | Video 5 | Video 6

所以在这种情况下,类别及其视频仍然可见,但对于类别一,列表将完全展开。如果用户再次单击类别 1,结果将与顶部的列表相同。

目前正在使用一个GridView来显示所有的视频,没有类别的分离和扩展类别的可能性。由于 GridView 不支持部分,因此它不适合新方法。

我考虑过为每个类别使用一个带有 GridView 的 ScrollView,但是如果我展开其中一个 GridView,就会发生 OutOfMemoryException,因为该类别的所有图像都会一次加载。除此之外,这感觉有点老套,我认为有更好的解决方案来解决这个问题。

我看到的另一种选择是 ExpandableListView。但我不知道的是,是否可以向其中添加一个部分,其中包含一些已经可见的项目,并在单击后显示其余项目。

你们认为这是一个不错的选择,还是我应该考虑考虑其他选择?感谢您的努力!

使用自行管理内存的 RecyclerView。

添加对gradle文件的依赖:

compile 'com.android.support:recyclerview-v7:23.1.1'

然后,here is basic of RecyclerView

好的,现在假设您知道如何使用 RecyclerView。

我们定义了两个级别的数据:

  • 第一级模型是一个带有列表的类别,
  • 二级模型是电影。

所以二级视图定义:

  • 第一级视图是一个 RecyclerView 包含许多 RecyclerView(取决于您的类别数)
  • 二级视图是一个 RecyclerView 包含很多 Movie。

here is code on github

FirstAdapter 中的关键代码:

// click show only 6, click again show all
public void showOrCollapse() {
    if (showAll && secondModel2Show.size() >= 6) {
        this.secondModel2Show = this.secondModel2Show.subList(0, 6);
    } else {
        this.secondModel2Show = this.secondModels;
    }
    this.notifyDataSetChanged();
    showAll = !showAll;
}

SecondAdapter 中的 ket 代码

// bind data to view
@Override
public void onBindViewHolder(FirstHolder holder, int position) {
    FirstModel firstModel = firstModels.get(position);
    holder.cat.setText(firstModel.getCat());
    final SecondAdapter secondAdapter = new SecondAdapter(firstModel.getSecondModels());
    holder.rcv.setLayoutManager(new FullyGridLayoutManager(activity, 3));
    holder.rcv.setAdapter(secondAdapter);
    holder.cat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            secondAdapter.showOrCollapse();
        }
    });
}

第一个模型

public class FirstModel {

    private String cat;

    private List<SecondModel> secondModels;

}

第二个模型

public class SecondModel {

    private int res;

}