gpt4 book ai didi

java - 如何在不使用第三方库的情况下使 recyclerview 可扩展

转载 作者:行者123 更新时间:2023-11-30 00:43:43 30 4
gpt4 key购买 nike

我想使用 RecyclerView 创建项目列表,并希望在单击时展开特定项目(如电话列表)。我想在不使用任何库的情况下实现这一目标。谁能帮忙?

最佳答案

获取子数据列表作为数据集中父数据的成员。并且,在 RecyclerView 行的点击事件中,像这样使用它们......这里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));
}

在这里,我将在 txt_title 上的点击事件中将子数据添加到主数据集同样,像这样使用 Title(parent)data(child) 作为两个不同的 ViewType

@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);
}
}

如果您的 subview 是固定的(您想要展开/折叠)然后将它们包裹在布局中,并使该布局可见/随动画一起消失以实现展开折叠效果引用 this link使它们动画化

关于java - 如何在不使用第三方库的情况下使 recyclerview 可扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42134493/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com