Java 如何在不使用第三方库的情况下使recyclerview可扩展
我想使用RecyclerView创建一个项目列表,并想在单击时展开特定的项目(如在电话列表中)。我想在不使用任何库的情况下实现这一点。有人能帮忙吗?将子数据列表作为数据集中父数据的成员获取。 并且,在RecyclerView行的单击事件中,像这样使用它们。。 在这里Java 如何在不使用第三方库的情况下使recyclerview可扩展,java,android,Java,Android,我想使用RecyclerView创建一个项目列表,并想在单击时展开特定的项目(如在电话列表中)。我想在不使用任何库的情况下实现这一点。有人能帮忙吗?将子数据列表作为数据集中父数据的成员获取。 并且,在RecyclerView行的单击事件中,像这样使用它们。。 在这里 mdataSet是RecyclerView的主要数据集 final TitleHolder holder = (TitleHolder) h; final Model model = (Model) mdataSet
mdataSet
是RecyclerView的主要数据集
final TitleHolder holder = (TitleHolder) h;
final Model model = (Model) mdataSet.get(position);
holder.txt_title.setText(model.getTitle());
holder.childItem = model;
holder.txt_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (model.getChildList() == null) {
//collapse
((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded = false;
holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow_reverse));
model.childList = new ArrayList<ModelData>();
int count = 0;
int pos = mdataSet.indexOf(holder.childItem);
while (mdataSet.size() > pos + 1 && mdataSet.get(pos + 1).type == Model.VIEW_CHILD) {
model.childList.add((ModelData) mdataSet.remove(pos + 1));
count++;
}
notifyItemRangeRemoved(pos + 1, count);
} else {
//expand
((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded = true;
holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow));
int pos = mdataSet.indexOf(holder.childItem);
int index = pos + 1;
for (ModelData i : model.getChildList()) {
mdataSet.add(index, i);
index++;
}
notifyItemRangeInserted(pos + 1, index - pos - 1);
model.childList = null;
}
}
});
if (((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded) {
holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow));
}
或
如果您的子视图是固定的(您希望展开/折叠),则将其包装在布局中,并使该布局可见/随动画消失,以实现展开/折叠效果
请参考我们的图书馆,让它们成为动画,因为android确实提供了可扩展的回收器视图,所以您无法做到这一点。。这里有一个关于可扩展回收器视图@AbhishekSingh的好教程,您可以在没有外部库的情况下完成这项工作。看我的ans@MilindMevada谢谢,我会试试的。这是实现这一目标的另一种方式。感谢@AbhishekSingh将我的ans合并。我已经删除了我的其他帖子。这将对搜索相同问题的其他人有帮助
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TITLE) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_expand_title, parent, false);
return new TitleHolder(itemView);
} else {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_wallet_history, parent, false);
return new DataHolder(itemView);
}
}