我想要对我的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”的项目之前,怎么会在排序列表中发生这种情况,或者我在上面的代码中做错了什么?
答案 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);