如何对回收站进行排序

Hay*_*yan 5 java android android-recyclerview

我创建了一个recyclerView(见此图)在此处输入图片说明

但是我没有得到想要的结果。我需要得到这个:

在此处输入图片说明

您会看到我已经对该专业进行了分组,并且所有专业都有其自己的图标。现在,我将包括我的recyclerView代码。我要如何在图片中喜欢?如果我做错了什么,请告诉我,不要拒绝投票。

这是项类。

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这里将adapter与它的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);

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经完成了的分组工作onBindViewHolder(),所以在那里观看,我得到的不是我想要的结果,我想得到图像的结果。

这是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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

如何修改我的代码,如何进行分组更改recyclerView

gbr*_*tto 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);
Run Code Online (Sandbox Code Playgroud)

要显示每个部分的除数(线),您可以将其添加到 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于图标部分,您可以使用相同的逻辑。让它隐藏在xml设计中,如果该项目是列表中的第一个项目,或者如果前一个项目专业的首字母不同,即当前项目是其部分的第一个项目,则显示它。您可以查看职业名称来设置相应的图像。

快乐编码!