Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何分组recyclerView,在组之间添加分隔,并为每个组添加一个图标_Java_Android_Sorting_Android Recyclerview - Fatal编程技术网

Java 如何分组recyclerView,在组之间添加分隔,并为每个组添加一个图标

Java 如何分组recyclerView,在组之间添加分隔,并为每个组添加一个图标,java,android,sorting,android-recyclerview,Java,Android,Sorting,Android Recyclerview,我需要像这样创建recyclerView: 我创建了我的recyclerView、done组、添加分隔符和图标,但结果不正确。所以我得到了这个: 这不是我想要的结果。让我给你看看源代码 public class Supporters_item { private int image; private String fullName; private String profession; public Supporters_item(int image, String fullName, St

我需要像这样创建recyclerView:

我创建了我的recyclerView、done组、添加分隔符和图标,但结果不正确。所以我得到了这个:

这不是我想要的结果。让我给你看看源代码

public class Supporters_item {

private int image;
private String fullName;
private String profession;

public Supporters_item(int image, String fullName, String profession) {
    this.image = image;
    this.fullName = fullName;
    this.profession = profession;
}

public int getImage() {
    return image;
}

public String getFullName() {
    return fullName;
}

public String getProfession() {
    return profession;
}}
这就是项目部分。我认为这在这里没有必要

现在是适配器

public class SupportersAdapter extends RecyclerView.Adapter<SupportersAdapter.MyViewHolder> {

Context context;
List<Supporters_item> list = new ArrayList<>();

public SupportersAdapter(Context context, List<Supporters_item> list) {
    this.context = context;
    this.list = list;
}


@Override
public SupportersAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v;
    v = LayoutInflater.from(context).inflate(R.layout.supporters_view_item, parent, false);
    MyViewHolder holder = new MyViewHolder(v);
    return holder;
}

@Override
public void onBindViewHolder(SupportersAdapter.MyViewHolder holder, int position) {
    holder.imageView.setImageResource(list.get(position).getImage());
    holder.fullName.setText(list.get(position).getFullName());
    holder.profession.setText(list.get(position).getProfession());

    if (list.get(position).getProfession().equals("Actress")) {
        holder.icon.setImageResource(R.drawable.medical);
    }
    if (list.get(position).getProfession().equals("Builder")) {
        holder.icon.setImageResource(R.drawable.builderkey);
    }
    if (list.get(position).getProfession().equals("Designer")) {
        holder.icon.setImageResource(R.drawable.shopping);
    }
    if (list.get(position).getProfession().equals("Programmer")) {
        holder.icon.setImageResource(R.drawable.education);
    }

    if (position == 0) {
        holder.icon.setVisibility(View.VISIBLE);
    }
    if (position >0) {
        if (!list.get(position).getProfession().substring(0, 1).equals
                (list.get(position - 1).getProfession().substring(0, 1))) {
            holder.view.setVisibility(View.VISIBLE);
            holder.icon.setVisibility(View.VISIBLE);
        }
    }
}

@Override
public int getItemCount() {
    return list.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    ImageView imageView, icon;
    TextView fullName, profession;
    View view;

    public MyViewHolder(View itemView) {
        super(itemView);

        imageView = (ImageView) itemView.findViewById(R.id.support_picture);
        fullName = (TextView) itemView.findViewById(R.id.fName);
        profession = (TextView) itemView.findViewById(R.id.profession);
        icon = (ImageView) itemView.findViewById(R.id.icon);
        view = itemView.findViewById(R.id.bottomLine);

    }
}}

您正在为单个ViewHolder的一个条件块中设置holder.view和holder.icon的可见性,但holder.view和holder.icon的可见性将在两个连续的ViewHolder之间更改

示例:如果行索引3与行索引4不同,则行索引3的holder.view将可见,行索引4的holder.icon将可见。因此,不能在一个条件块中更改它,因为一次只能获得一个ViewHolder

将其转换为2个检查块

由于RecycleView将重用视图,因此最初使这两个视图都不可见/消失

        holder.view.setVisibility(View.GONE);
        holder.icon.setVisibility(View.INVISIBLE);
对于底部视图holder.view:

另外,添加并保持此状态,因为位置0将显示图标

if (position == 0) {
    holder.icon.setVisibility(View.VISIBLE);
}

如果我正确理解你的问题,我想这会解决你的问题

是的,伙计,这起作用了。谢谢
    if (position +1 < getItemCount() ) {
      if (!list.get(position).getProfession().substring(0, 1).equals
            (list.get(position + 1).getProfession().substring(0, 1))) {
          holder.view.setVisibility(View.VISIBLE);

      }
  }
    if (position >0) {
    if (!list.get(position).getProfession().substring(0, 1).equals
            (list.get(position - 1).getProfession().substring(0, 1))) {
        holder.icon.setVisibility(View.VISIBLE);
    }
}
if (position == 0) {
    holder.icon.setVisibility(View.VISIBLE);
}