【问题标题】:How can I sort the items in a ListView?如何对 ListView 中的项目进行排序?
【发布时间】:2014-06-14 08:34:00
【问题描述】:

我想对我的ListView 进行排序,我怎样才能做到这一点?`有什么方法可以完成这项工作吗?

Java_代码:

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”的项目之前,这怎么会发生在排序列表中,或者我在上面的代码中做错了什么?

【问题讨论】:

    标签: android listview


    【解决方案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();

    如果您动态加载值,请将值存储在迭代器中,然后再将值存储在列表或其他中。那时只有您可以使用mArrayAdapter.notifyDataSetChanged();

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

    【讨论】:

    • 如果没有修复,请发布您的 retrieveMPLNames() 方法代码
    • 令人惊讶的是,有一个名为“我”的项目在名为“咖啡”的项目之前?!
    • 发布您的设备屏幕截图
    • 如果你使用 hashmap 它有两个参数 key 和 value,"Me" 可能是你案例的关键值
    • 抱歉什么意思?
    【解决方案2】:

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

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

    【讨论】:

    • 请您看一下更新后的代码和cmets
    • 您能告诉我,应该在设置适配器之后还是之前通知?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 2012-03-10
      相关资源
      最近更新 更多