【问题标题】:Filtering Listview not showing correct result when listview item is clicked on Android在 Android 上单击列表视图项时,过滤列表视图未显示正确结果
【发布时间】:2015-02-04 15:00:55
【问题描述】:

在过滤列表视图数据后单击 lisview 中的项目时,我得到了错误的结果。我了解过滤列表视图时位置值会发生变化,但我无法弄清楚如何获得正确的位置值。

    mListView.setAdapter(mAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, data));
    mListView.setTextFilterEnabled(true);
    setupSearchView();
    mAdapter.setNotifyOnChange(true);

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            getActivityMain().pushNextFragment(FragmentWebview.newInstance(bbcNewsList.get(position).link,"roundfeed",bbcNewsList.get(position).title,bbcNewsList.get(position).source,bbcNewsList.get(position).image));
            System.out.println(" id " + id + " pos " + position);
        }
    });

我需要使用自定义适配器吗?

【问题讨论】:

  • 过滤后尝试调用mAdapter.notifyDataSetChanged()
  • 感谢您的回复,但没有奏效。

标签: java android listview filter


【解决方案1】:

您无法了解您的代码当前的状态,因为无法将您的外部列表与适配器的列表同步……尤其是在涉及过滤时。您将需要一个自定义适配器来存储bbcNewsList 的数据类型。为了这个答案,假设List 正在存储Foo 对象。你会想做这样的事情:

List<Foo> bbcNewsList;
// Fill bbcNewsList with data

mAdapter = new MyCustomAdapter(getActivity(),bbcNewsList);
mListView.setAdapter(mAdapter);
//Continue instantiation as needed

您可以尝试为您的自定义解决方案扩展ArrayAdapter,但这可能会出现问题。首先,您需要覆盖 getView() 方法,以便它知道如何显示您的自定义 Foo 对象。否则,它只会将您的 Foo 对象转换为 String 并显示它。通过图片中的过滤,您会被默认逻辑所困扰。在您的情况下,ArrayAdapter 会将您的 Foo 对象转换为 String 并根据该结果进行过滤。您可能对这种行为很好,在这种情况下,您对这种方法很好。但是我会警告说,如果您打算即时修改ArrayAdapterfiltering bug 会很糟糕。

另一种选择是从头开始编写自己的适配器。又名实现BaseAdapter 类。虽然不是太令人生畏,但对于那些刚刚学习 Android 或不确定适配器通常如何工作的人来说,这可能是相当具有挑战性的。此解决方案还需要您实现所有过滤代码。

最后第三种选择是使用第三方库。我建议 AbsArrayAdapter 类。您基本上会在此处执行第一个选项的操作,但您可以选择指定如何过滤 Foo 对象。它也不受 Android 的 ArrayAdapter 中的过滤错误的影响。

【讨论】:

  • 非常感谢您的详细回答,非常有帮助,我将检查 ABSArrayAdapter。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2014-11-21
  • 1970-01-01
相关资源
最近更新 更多