具有可扩展项目的 RecyclerView
RecyclerView with expandable items
我需要制作一个可展开的 RecyclerView
,每次点击只能打开一个项目(所有其他项目都必须关闭)。
我知道有可能在 ExpandableListView
的帮助下做到这一点,然后使用下一个代码:
elv.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
if (lastExpandedPosition != -1
&& groupPosition != lastExpandedPosition) {
elv.collapseGroup(lastExpandedPosition);
}
lastExpandedPosition = groupPosition;
}
});
但是有没有办法用 RecyclerView
做同样的事情?
你可以使用一些库来完成,我会推荐Advanced RecyclerView
看看Advanced RecyclerView. And here是展开项的例子
Here is a nice tutorial for expending RecyclerView
from Big Nerd Ranch
总结:
- 定义两种布局:一种用于父项,一种用于子项。
- 为这些布局定义两个 ViewHolder。
- 为父对象和子对象定义两个 类。
- 父对象必须实现 ParentObject 接口。
- 定义自定义适配器。
- 在适配器上调用
setParentAndIconExpandOnClick(true)
。
对于一次只有一个展开视图,您可以跟踪最后一个展开视图并在用户点击新视图时将其关闭。
如果使用 Expandable RecyclerView form big nerd ranch,这是跟踪和实现每次点击只打开一个项目的方法-
Stack<Integer> mStack = new Stack<>();
mRecyclerViewAdapter.setExpandCollapseListener(new ExpandableRecyclerAdapter.ExpandCollapseListener() {
@Override
public void onListItemExpanded(int position) {
try {
int x = mStack.pop();
mRecyclerViewAdapter.collapseParent(x);
} catch (EmptyStackException ex) {
}
mStack.push(position);
}
@Override
public void onListItemCollapsed(int position) {
try {
mStack.pop();
} catch (EmptyStackException ex) {
}
}
});
我需要制作一个可展开的 RecyclerView
,每次点击只能打开一个项目(所有其他项目都必须关闭)。
我知道有可能在 ExpandableListView
的帮助下做到这一点,然后使用下一个代码:
elv.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
if (lastExpandedPosition != -1
&& groupPosition != lastExpandedPosition) {
elv.collapseGroup(lastExpandedPosition);
}
lastExpandedPosition = groupPosition;
}
});
但是有没有办法用 RecyclerView
做同样的事情?
你可以使用一些库来完成,我会推荐Advanced RecyclerView
看看Advanced RecyclerView. And here是展开项的例子
Here is a nice tutorial for expending RecyclerView
from Big Nerd Ranch
总结:
- 定义两种布局:一种用于父项,一种用于子项。
- 为这些布局定义两个 ViewHolder。
- 为父对象和子对象定义两个 类。
- 父对象必须实现 ParentObject 接口。
- 定义自定义适配器。
- 在适配器上调用
setParentAndIconExpandOnClick(true)
。
对于一次只有一个展开视图,您可以跟踪最后一个展开视图并在用户点击新视图时将其关闭。
如果使用 Expandable RecyclerView form big nerd ranch,这是跟踪和实现每次点击只打开一个项目的方法-
Stack<Integer> mStack = new Stack<>();
mRecyclerViewAdapter.setExpandCollapseListener(new ExpandableRecyclerAdapter.ExpandCollapseListener() {
@Override
public void onListItemExpanded(int position) {
try {
int x = mStack.pop();
mRecyclerViewAdapter.collapseParent(x);
} catch (EmptyStackException ex) {
}
mStack.push(position);
}
@Override
public void onListItemCollapsed(int position) {
try {
mStack.pop();
} catch (EmptyStackException ex) {
}
}
});