How to sort recyclerView correctly

I created a recyclerView(see in this image)enter image description here

But I do not get the result I want. I need to get the following:

enter image description here

You see that I have already grouped a profession, and all professions have their own badge. So now I will include the code recyclerView. How can I be like an image? If I did something wrong, please say do not give a downward voice.

Here is the items class.

public class Rec_Items {

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

    public Rec_Items(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;
    }
}

Now here adapterwith him ViewHolder.

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) {
            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);

        }
    }
}

I made the group part in onBindViewHolder(), so watch for it, I do not get the result that I want, I want to get the result of the image.

Here is the class MainActivity.

public class MainActivity extends AppCompatActivity {

    private List<Rec_Items> list;
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.supporters_recycler);
        add();
        Adapter adapter = new Adapter(this, list);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

    }

    public void add(){
        list = new ArrayList<>();
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Actress"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Programmer"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Builder"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Designer"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Actress"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Programmer"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Builder"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Designer"));
    }
}

How can I change my code, what to change for grouping recyclerView?

+4
2

:

List<Rec_Items> sortedList = new ArrayList();
if (list.size() > 0) {
    Collections.sort(list, new Comparator<Rec_Items>() {
        @Override
        public int compare(final Rec_Items object1, final Rec_Items object2) {
            return object1.getProfession().compareTo(object2.getProfession());
        }
    });
}

//                                  SORTED LIST
Adapter adapter = new Adapter(this, sortedList);

() , xml- android:visibility="gone" , :

//Inside onBindViewHolder method:
if(position > 0){
        // [----------------PREVIOUS ITEM-----------------]       [------------------CURRENT ITEM------------------]
    if(!list.get(position-1).getProfession().substring(0,1).equals(list.get(position).getProfession().substring(0,1))){
        //Example: holder.getDivisor().setVisibility(View.VISIBLE);
    }
}

. xml , , , . , .

!

+1

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

    //call button listener
    holder.buttonCall.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context, "Whom you wanna call?", Toast.LENGTH_SHORT).show();
        }
    });

    //setting icons for each profession
    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.spanner);
    }
    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);
    }

    //setting first icon always visible
    if (position == 0) {
        holder.icon.setVisibility(View.VISIBLE);
    }

    //setting bottom view visible for dividing
    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);
        }
    }

    //setting icon visible for group of profession
    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);
        }
    }
}

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

Source: https://habr.com/ru/post/1693845/


All Articles