如何对ListView中的项目进行排序?

时间:2014-06-14 08:34:00

标签: android listview

我想要对我的ListView进行排序,我怎样才能实现这一目标?`有什么方法可以完成这项工作吗?

Java_Code:

String [] mplNames = retrieveMPLNames();
        List<String> sortedMPLNames = Arrays.asList(mplNames);
        Collections.sort(sortedMPLNames);
        mplNames = (String[]) sortedMPLNames.toArray();
        mArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.savedlocationlist_layout, 
                R.id.savedLocationName, mplNames);
        mArrayAdapter.notifyDataSetChanged();
        mListView.setAdapter(mArrayAdapter);

对上述代码的评论

现在列表中的项目以“0”作为第一个元素开始,项目以“y”作为最后一个项目开始,但在它们之间,有一个名为“Me”的项目按顺序排列在名为“a coffee”的项目之前,怎么会在排序列表中发生这种情况,或者我在上面的代码中做错了什么?

3 个答案:

答案 0 :(得分:1)

mListView=(ListView)findViewById(R.id.listView1);
        String [] mplNames = {"one","two","three","four","six","eight"};
        List<String> sortedMPLNames = Arrays.asList(mplNames);
        Collections.sort(sortedMPLNames);
        mplNames = (String[]) sortedMPLNames.toArray();
       ArrayAdapter mArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.mylist, 
                R.id.list_content, mplNames);
       mListView.setAdapter(mArrayAdapter);

我已经尝试过你的代码,它的工作正常。

从您的代码中删除mArrayAdapter.notifyDataSetChanged();

如果动态加载值,请将值存储在迭代器中,然后将值存储在list或else中。在那个时间,只能使用mArrayAdapter.notifyDataSetChanged();

itr1=list12.iterator();
    while(itr.hasNext()&&itr1.hasNext())
    {
         mplnames.add(0, itr.next().toString());
         mArrayAdapter.notifyDataSetChanged();
    }

答案 1 :(得分:0)

首先,对于任何listView排序,您必须对传递的adapter列表或数组进行排序,然后只需刷新列表即adapter_name.notifyDataSetChanged()。尝试将列表转换为数组

String[] mplNames = sortedMPLNames.stream().toArray(String[]::new);

答案 2 :(得分:0)

使用Collections.sort(your-list-name);