Java 如何在自定义ListView ArrayList中进行排序,以及如何在Spinner中进行排序?

Java 如何在自定义ListView ArrayList中进行排序,以及如何在Spinner中进行排序?,java,android,listview,arraylist,Java,Android,Listview,Arraylist,我有自定义的ArrayList,我想用Spinner或按钮或其他任何东西对其进行降序和升序排序 我的ArrayList中有这个: reports = new ArrayList<Word>(); reports.add(new Word("AC", "Rektorat", "1101", "3 hari", R.drawable.ac, "AC tidak dingin sama sekali")); reports.add(new Word("Papan Tulis", "Gri

我有自定义的
ArrayList
,我想用
Spinner
按钮
或其他任何东西对其进行降序和升序排序

我的ArrayList中有这个:

reports = new ArrayList<Word>();

reports.add(new Word("AC", "Rektorat", "1101", "3 hari", R.drawable.ac, "AC tidak dingin sama sekali"));
reports.add(new Word("Papan Tulis", "Griya Legita","2502", "5 hari", R.drawable.papantulis, "terdapat noda yang tidak bisa hilang"));
reports.add(new Word("Meja", "Griya Legita","2304", "10 hari", R.drawable.meja, "Berdiri tidak seimbang karena kaki patah"));
reports.add(new Word("Kursi", "Griya Legita","2302", "15 hari", R.drawable.kursi, "senderan patah sebanyak 20 buah"));
reports.add(new Word("Atap", "Griya Legita","2807", "21 hari", R.drawable.atap, "bolong terkena lemparan sepatu"));
reports.add(new Word("Lampu", "Griya Legita","Perpustakaan", "30 hari", R.drawable.lampu, "mati 2 buah"));
reports.add(new Word("Sofa", "Griya Legita","Lobby", "43 hari", R.drawable.sofa, "ketumpahan obat nyamuk"));

CardView rootView = (CardView) findViewById(R.id.root_view);

WordAdapter adapter = new WordAdapter(this, reports, R.color.colorPrimary);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        Serializable data = (Word) listView.getItemAtPosition(position);
        Intent intent = new Intent (listView.getContext(), LokasiActivity.class);
        intent.putExtra("report", data);
        listView.getContext().startActivity(intent);
    }
});
Collections.sort(reports, new Comparator<Word>() {
    @Override
    public int compare(Word o1, Word o2) {
        return o2.getAset().compareTo(o1.getAset());
    }
});
Collections.sort(reports, new Comparator<Word>() {
    @Override
    public int compare(Word o1, Word o2) {
        return o1.getAset().compareTo(o2.getAset());
    }
});
我想把它分类,但不知道怎么分类,因为这是习惯。请帮忙

我试着把它放在旋转器上,但不起作用

public void addItemOnSpinner(){

        spn = (Spinner) findViewById(R.id.spinner);
        List<String> list = new ArrayList<String>();
        list.add("Sort By");
        list.add("Descending");
        list.add("Ascending");
        spn.setOnItemSelectedListener(this);
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spn.setAdapter(dataAdapter);

    }
@Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        if ( spn.getSelectedItem().toString().trim().equals("Descending")) {
            Collections.sort(reports, new Comparator<Word>() {
                @Override
                public int compare(Word o1, Word o2) {
                    return o2.getAset().compareTo(o1.getAset());
                }
            });

        }
        else{

        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
public void addItemOnSpinner(){
spn=(微调器)findViewById(R.id.Spinner);
列表=新的ArrayList();
列表。添加(“排序依据”);
列表。添加(“降序”);
列表。添加(“升序”);
spn.setOnItemSelectedListener(此);
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u下拉菜单\u项,列表);
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
设置适配器(数据适配器);
}
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
if(spn.getSelectedItem().toString().trim().equals(“降序”)){
Collections.sort(报告、新比较器(){
@凌驾
公共整数比较(单词o1,单词o2){
返回o2.getAset().compareTo(o1.getAset());
}
});
}
否则{
}
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}

您可以在
Word.class
而不是重写compareTo()方法

interface Comparable<T> { int compareTo(T obj) }
接口可比较{int compareTo(T obj)}
或实现比较器接口

interface Comparator<T> { int compare(T obj1, T obj2); }
接口比较器{int compare(T obj1,T obj2);}
然后重写
compare()
方法

interface Comparable<T> { int compareTo(T obj) }
见javadoc。我希望它能帮助你

试试这个:
下降:

reports = new ArrayList<Word>();

reports.add(new Word("AC", "Rektorat", "1101", "3 hari", R.drawable.ac, "AC tidak dingin sama sekali"));
reports.add(new Word("Papan Tulis", "Griya Legita","2502", "5 hari", R.drawable.papantulis, "terdapat noda yang tidak bisa hilang"));
reports.add(new Word("Meja", "Griya Legita","2304", "10 hari", R.drawable.meja, "Berdiri tidak seimbang karena kaki patah"));
reports.add(new Word("Kursi", "Griya Legita","2302", "15 hari", R.drawable.kursi, "senderan patah sebanyak 20 buah"));
reports.add(new Word("Atap", "Griya Legita","2807", "21 hari", R.drawable.atap, "bolong terkena lemparan sepatu"));
reports.add(new Word("Lampu", "Griya Legita","Perpustakaan", "30 hari", R.drawable.lampu, "mati 2 buah"));
reports.add(new Word("Sofa", "Griya Legita","Lobby", "43 hari", R.drawable.sofa, "ketumpahan obat nyamuk"));

CardView rootView = (CardView) findViewById(R.id.root_view);

WordAdapter adapter = new WordAdapter(this, reports, R.color.colorPrimary);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        Serializable data = (Word) listView.getItemAtPosition(position);
        Intent intent = new Intent (listView.getContext(), LokasiActivity.class);
        intent.putExtra("report", data);
        listView.getContext().startActivity(intent);
    }
});
Collections.sort(reports, new Comparator<Word>() {
    @Override
    public int compare(Word o1, Word o2) {
        return o2.getAset().compareTo(o1.getAset());
    }
});
Collections.sort(reports, new Comparator<Word>() {
    @Override
    public int compare(Word o1, Word o2) {
        return o1.getAset().compareTo(o2.getAset());
    }
});
Collections.sort(报告、新比较器(){
@凌驾
公共整数比较(单词o1,单词o2){
返回o2.getAset().compareTo(o1.getAset());
}
});
上升:

reports = new ArrayList<Word>();

reports.add(new Word("AC", "Rektorat", "1101", "3 hari", R.drawable.ac, "AC tidak dingin sama sekali"));
reports.add(new Word("Papan Tulis", "Griya Legita","2502", "5 hari", R.drawable.papantulis, "terdapat noda yang tidak bisa hilang"));
reports.add(new Word("Meja", "Griya Legita","2304", "10 hari", R.drawable.meja, "Berdiri tidak seimbang karena kaki patah"));
reports.add(new Word("Kursi", "Griya Legita","2302", "15 hari", R.drawable.kursi, "senderan patah sebanyak 20 buah"));
reports.add(new Word("Atap", "Griya Legita","2807", "21 hari", R.drawable.atap, "bolong terkena lemparan sepatu"));
reports.add(new Word("Lampu", "Griya Legita","Perpustakaan", "30 hari", R.drawable.lampu, "mati 2 buah"));
reports.add(new Word("Sofa", "Griya Legita","Lobby", "43 hari", R.drawable.sofa, "ketumpahan obat nyamuk"));

CardView rootView = (CardView) findViewById(R.id.root_view);

WordAdapter adapter = new WordAdapter(this, reports, R.color.colorPrimary);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        Serializable data = (Word) listView.getItemAtPosition(position);
        Intent intent = new Intent (listView.getContext(), LokasiActivity.class);
        intent.putExtra("report", data);
        listView.getContext().startActivity(intent);
    }
});
Collections.sort(reports, new Comparator<Word>() {
    @Override
    public int compare(Word o1, Word o2) {
        return o2.getAset().compareTo(o1.getAset());
    }
});
Collections.sort(reports, new Comparator<Word>() {
    @Override
    public int compare(Word o1, Word o2) {
        return o1.getAset().compareTo(o2.getAset());
    }
});
Collections.sort(报告、新比较器(){
@凌驾
公共整数比较(单词o1,单词o2){
返回o1.getAset().compareTo(o2.getAset());
}
});
然后更新列表:

if ( spn.getSelectedItem().toString().trim().equals("Descending")) {
        Collections.sort(reports, new Comparator<Word>() {
            @Override
            public int compare(Word o1, Word o2) {
                return o2.getAset().compareTo(o1.getAset());
            }
        });

    }

((BaseAdapter) listView.getAdapter()).notifyDataSetChanged();
if(spn.getSelectedItem().toString().trim().equals(“降序”)){
Collections.sort(报告、新比较器(){
@凌驾
公共整数比较(单词o1,单词o2){
返回o2.getAset().compareTo(o1.getAset());
}
});
}
((BaseAdapter)listView.getAdapter()).notifyDataSetChanged();

如果要按名称排序:

Collections.sort(atlastContacts, new Comparator<AtlasContact>(){
    @Override
    public int compare(AtlasContact a1, AtlasContact a2) {
        return a1.getName().compareToIgnoreCase(a2.getName());
    }
});
Collections.sort(atlastContacts,new Comparator(){
@凌驾
公共int比较(AtlasContact a1、AtlasContact a2){
返回a1.getName().compareToIgnoreCase(a2.getName());
}
});

使用比较器,如下所示:

Collections.sort(reports, new CustomComparator());
这是您的CustomComparator类:

public class CustomComparator implements Comparator<Case> {

    @Override
    public int compare(Case o1, Case o2) {

        return o1.getContent().compareTo(o2.getContent());

    }
}
公共类CustomComparator实现Comparator{
@凌驾
公共整数比较(案例o1,案例o2){
返回o1.getContent().compareTo(o2.getContent());
}
}

可能重复的可能重复与对列表排序,然后通知适配器相同getContent只是一个示例,您可以从Word对象获取XXX。您应该告诉我
Word
object类。我可以在同一getContent中比较它吗?或者它一定不同?显示Word classSo、getAset()、getTempat()的内容。。。你要订购的所有字段。