android - 如何制作 RecyclerView 项目的子项的动态列表
问题描述
在我的 RecyclerView 中,我想要动态数量的项目,这些项目是我的 RecyclerView 中每个项目的子项。我临时做了额外的布局并将它们的可见性设置为消失,然后在按下添加按钮时将它们变为可见,但我知道这不是一个好习惯。我不认为嵌套在 RecyclerView 中的 ListView 是正确的。如果是,那么请告诉我我将如何去做。注意:由于某种原因,我无法在代码片段中显示我的代码的第一行
运动适配器
public class ExerciseAdapter extends RecyclerView.Adapter<ExerciseAdapter.ExerciseAdapterViewHolder> {
private List<Exercise> mExerciseList;
private static int counter = 0;
public class ExerciseAdapterViewHolder extends RecyclerView.ViewHolder {
final TextView anotherSetTextview;
final LinearLayout linearLayout4;
final LinearLayout linearLayout5;
ExerciseAdapterViewHolder(View view) {
super(view);
anotherSetTextview = view.findViewById(R.id.another_set);
linearLayout4 = view.findViewById(R.id.layout4);
linearLayout5 = view.findViewById(R.id.layout5);
}
}
@Override
public ExerciseAdapterViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Context context = viewGroup.getContext();
int layoutIdForListItem = R.layout.list_item_cardview;
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(layoutIdForListItem, viewGroup, false);
return new ExerciseAdapterViewHolder(view);
}
@Override
public void onBindViewHolder(final ExerciseAdapterViewHolder holder, int position) {
Exercise currentExercise = mExerciseList.get(position);
String count = Integer.toString(position + 1) + ".";
holder.anotherSetTextview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
if(counter==1)
holder.linearLayout4.setVisibility(View.VISIBLE);
else if(counter==2)
holder.linearLayout5.setVisibility(View.VISIBLE);
}
});
}
@Override
public int getItemCount() {
if (null == mExerciseList) return 0;
return mExerciseList.size();
}
public void setExerciseData(List<Exercise> exerciseData) {
mExerciseList = exerciseData;
notifyDataSetChanged();
}
public void addNewExercise(Exercise e){
mExerciseList.add(e);
notifyDataSetChanged();
}
}
我正在为我的班级制作一个锻炼跟踪器应用程序,我希望用户根据需要添加练习,然后他们根据需要为每个练习添加集合。基本上,RecyclerView 中的每个练习对象都需要有自己的动态数量的 Set 对象作为子对象。到目前为止我所拥有的这个屏幕截图应该有助于可视化我的目标。我还是新手,所以请原谅我的格式不佳。
解决方案
您可以在回收站视图项中动态扩展视图。只需在 R.layout.list_item_cardview布局中有一个线性布局,创建一个您想要的数据作为另一个子布局并根据需要扩展子布局。
public class ExerciseAdapter
extendsRecyclerView.Adapter<ExerciseAdapter.ExerciseAdapterViewHolder> {
private List<Exercise> mExerciseList;
public class ExerciseAdapterViewHolder extends RecyclerView.ViewHolder {
final TextView anotherSetTextview;
final LinearLayout layout;
ExerciseAdapterViewHolder(View view) {
super(view);
anotherSetTextview = view.findViewById(R.id.another_set);
layout = view.findViewById(R.id.layout);
}
}
@Override
public ExerciseAdapterViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Context context = viewGroup.getContext();
int layoutIdForListItem = R.layout.list_item_cardview;
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(layoutIdForListItem, viewGroup, false);
return new ExerciseAdapterViewHolder(view);
}
@Override
public void onBindViewHolder(final ExerciseAdapterViewHolder holder, int position) {
final Exercise currentExercise = mExerciseList.get(position);
for(int i=0;i<currentExercise.count;i++)
{
LayoutInflater inflater = LayoutInflater.from(holder.itemView.getContext());
LinearLayout linearLayout = inflater.inflate(R.layout.child, null);
holder.layout.addView(linearLayout);
}
holder.anotherSetTextview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentExercise.count++;
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
if (null == mExerciseList) return 0;
return mExerciseList.size();
}
public void setExerciseData(List<Exercise> exerciseData) {
mExerciseList = exerciseData;
notifyDataSetChanged();
}
public void addNewExercise(Exercise e){
mExerciseList.add(e);
notifyDataSetChanged();
}
}
推荐阅读
- scala - 当我使用格式“MM/dd/yyyy HH:mm a”解析日期“03/12/2009 19:12 PM”时,它返回 true
- android - 我们应该在 Kotlin Android 项目中使用黄油刀还是 findViewById(),因为我们可以通过 id 直接访问视图
- django - Django rest框架:如何根据特定字段(=不是id)获取外键
- elasticsearch - 在 Kibana 和 Elasticsearch 中使用管道聚合进行可视化
- python - 如何绕过 GIL 并处理 KeyboardInterrupt?
- ios - 如何为 iOS 和 tvOS 使用相同的 pod?
- javascript - 无法使用从文本字段加载 GPS 坐标的谷歌地图 API 制作多边形
- c# - 如何在数字海洋上将 aspnetcore 应用程序部署到 ubuntu
- django - 将表单域的第一个字母大写(不保存新值)
- javascript - 在服务器端获取返回 ajax 值