【问题标题】:Sorting my ArrayAdapter doesn't change my data source对我的 ArrayAdapter 进行排序不会更改我的数据源
【发布时间】:2010-09-14 03:54:47
【问题描述】:

我遇到了一个奇怪的问题。我有一个正在排序的 ArrayAdapter。这在我的屏幕上正确显示,但是当我检查实际数据源时,内容尚未排序。如何确保对我的 ListAdapter 进行排序也会对我的数据源进行排序?

Collections.sort(quotes, new PercentChangeComparator()); //sort my data source (this isn't necessary)
quotesAdapter.sort(new PercentChangeComparator()); //sort my ListAdapter
Toast toast = Toast.makeText(getApplicationContext(),quotes.get(0).getSymbol(), Toast.LENGTH_SHORT);
toast.show(); //this shows that my data source hasn't been updated, even though my ListAdapter presents my ListView in the correctly sorted order.

例如: 如果我的数据源是[10,9,1,20]

排序后我的 ListView 将显示[1,9,10,20]

但数据源仍将是[10,9,1,20]

我该如何解决这个问题?

【问题讨论】:

    标签: java android sorting android-arrayadapter


    【解决方案1】:

    反之亦然:对数据源进行排序将对 ArrayAdapter 进行排序。

    我假设你以前做过类似的事情。

    ArrayList<PercentChangeComparator> quotes = getQuotesFromSomewhere();
    QuotesAdapter quotesAdapter = new QuotesAdapter(this, R.layout.xxx, quotes);
    

    然后,如果您对引号进行了排序,则通知适配器数据集已更改应该对列表进行排序

    Collections.sort(quotes, new PercentChangeComparator());
    quotesAdapter.notifyDataSetChanged();
    

    这对我有用,我希望它有所帮助。

    一件重要的事情:如果您重新创建源数组(quotes 在此特定示例中),适配器将不会读取进一步的更改。因此,如果您需要修改 ListView 的内容,请执行以下操作:

    quotes.clear();
    quotes.add(...);
    quotes.add(...);
    

    另外,请确保您正确实施了比较器。如果你执行这个

    Collections.sort(quotes, new PercentChangeComparator());
    

    and quotes 没有排序,那么问题与 Adapter 无关,而与比较有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2013-03-02
      • 2012-06-28
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 2017-05-21
      相关资源
      最近更新 更多