android - 如何用RecycleView展示分层数据结构?

标签 android ios uitableview android-recyclerview

在 iOS 中,如果您的数据结构具有两级、“部分”、“行”,那么 UITableView 非常适合呈现数据。它有两个委托(delegate)方法:

numberOfSectionsInTableView(tableView: UITableView) -> Int    
tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

第一种方法询问部分的数量,第二种方法询问某个部分中存在多少行。

Android 中是否存在这种方法?

enter image description here

最佳答案

RecyclerView.Adapter 支持多种开箱即用的 View 类型。您想在任何特定位置显示哪种项目类型取决于您。您可以轻松地使用它来创建部分,例如,如果您定义两个项目类型 TYPE_HEADER 和 TYPE_ITEM:

@Override
public int getItemViewType(int position) {
    if (isHeader(position)) {
        return TYPE_HEADER;
    } else {
        return TYPE_ITEM;
    }
}

然后,您可以使用 onCreateViewHolder 来扩充适当的布局,并使用 onBindViewHolder 来利用它。

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == TYPE_HEADER) {
        View v = ... ; // inflate here
        return new HeaderViewHolder(v);
    } else {
        View v = ... ; // inflate here
        return new ItemViewHolder(v);
    }    
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if (holder instanceof HeaderViewHolder) {
        // handle header
    } else if (holder instanceof ItemViewHolder {
        // handle item
    }
}

您可以使用您选择的数据结构。我更喜欢使用我自己实现的树状结构,或者只是简单的 ArrayList 和 instanceof 来检测项目是标题还是内容。

关于android - 如何用RecycleView展示分层数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39228288/

相关文章:

android - 我需要导入什么才能在 UnitTests 中使用 launchActivity<>() ?

android - 使用 alljoyn 发送数据

android - 安卓模拟器的问题。不更新 xml 文件中的更改

iOS 图表气泡图颜色

ios - 将十进制 NSString 转换为十六进制字符串

ios - UITableViewCell 没有正确更新 swift 2.2

ios - Segue 始终不传递行的正确索引路径第 0 节

android - 如何解决命令 "python systrace.py --set-tags gfx,view,wm"中的错误?

iPad - 如何在启动时自动将 RootView 中的第一个单元格加载到 DetailView 中?

swift - 在 SWIFT 的表格 View 中填充自定义单元格时出错