web-dev-qa-db-fra.com

Liste de tri Android par ordre alphabétique

Donc, j'essaie de trier une simple listview arrayadapter. Voici ce que j'ai essayé:

    ListView lv;
String[] months = {
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
};

ArrayAdapter<String> adapter;
ArrayList<String> list;

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

    lv = (ListView)findViewById (R.id.listView1);
    lv.setFastScrollEnabled(true);
    adapter = new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, months);
    lv.setAdapter(adapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub

    switch (item.getItemId()) {
    case R.id.sortasc:
        list = new ArrayList<String>(Arrays.asList(months));
        Collections.sort(list);
        for(int i=0; i < list.size(); i++){
            System.out.println(list.get(i));
        }
        adapter.clear();
        adapter = new ArrayAdapter<String>(this,
                Android.R.layout.simple_list_item_1, list);
        adapter.notifyDataSetChanged();
        return true;
    case R.id.sortdesc:

        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

Mais je reçois une exception UnsupportedOperationException, qu'est-ce qui ne va pas? J'ai vraiment besoin d'aide. Merci d'avance!

18
Dunkey

Vous n'avez pas appelé setAdapter (adaptateur) après avoir trié vos éléments. 

Utilisez comme ci-dessous 

adapter = new ArrayAdapter<String>(this,
                Android.R.layout.simple_list_item_1, list);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();

au lieu de 

adapter.clear(); // Useless 
adapter = new ArrayAdapter<String>(this,
                Android.R.layout.simple_list_item_1, list);
adapter.notifyDataSetChanged();
20
Pankaj Kumar

Voici le truc ...

private void sortAscending () {
    List<String> sortedMonthsList = Arrays.asList(months);
    Collections.sort(sortedMonthsList);

    months = (String[]) sortedMonthsList.toArray();
}

Et pour sortAscending, appelez

sortAscending();
adapter.notifyDatasetChanged();

De même, vous pouvez implémenter custom Comparator pour trier par ordre décroissant ...

J'espère que cela t'aides...:)

13
umair.ali
Comparator<String> ALPHABETICAL_ORDER1 = new Comparator<String>() { 
    public int compare(String object1, String object2) {
        int res = String.CASE_INSENSITIVE_ORDER.compare(object1.toString(), object2.toString()); 
        return res;
    }
}; 

Collections.sort(your array name, ALPHABETICAL_ORDER1);
8
deepak825

Liste de tri Android par ordre alphabétique. 

listAdapter = new AppsAdapter(MainActivity.this,R.layout.content_layout,appList);
        final Collator col = Collator.getInstance();
        listAdapter.sort(new Comparator<ApplicationInfo>() {
            @Override
            public int compare(ApplicationInfo lhs, ApplicationInfo rhs) {
                return col.compare(lhs.loadLabel(packageManager),rhs.loadLabel(packageManager));
            }
        });
3
Suriv
  1. Triez votre tableau.
  2. Recréer l'adaptateur.
  3. Appliquez l'adaptateur à listview.
1

Pour trier une liste, vous devez utiliser Comparator . Vous devez trier les collections sous-jacentes à l'aide d'un comparateur effectuant un tri alphabétique, puis informer la liste de se mettre à jour.

Voici un exemple d'utilisation à l'aide d'un ArrayAdapter: https://stackoverflow.com/a/8920348/1369222

1
Anup Cowkur

sa simple si vous avez déjà un autre adaptateur vous pouvez simplement copier coller ce code sous déclaration de

adapter.sort(new Comparator<String>() {
        @Override
        public int compare(String arg1, String arg0) {
            return arg1.compareTo(arg0);
        }
    });
0
Arshdeep Singh