簡體   English   中英

在Android上單擊列表視圖項時,過濾列表視圖未顯示正確的結果

[英]Filtering Listview not showing correct result when listview item is clicked on Android

過濾列表視圖數據后,單擊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);
        }
    });

我需要使用自定義適配器嗎?

您無法確定當前的代碼狀態,因為無法將外部列表與適配器的列表同步...尤其是在涉及過濾時。 您將需要一個自定義適配器,而不是存儲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並根據該結果進行過濾。 您可能會喜歡這種行為,在這種情況下,您會使用這種方法。 但是,我警告說,如果您打算即時修改ArrayAdapter會有一個非常討厭的過濾錯誤

另一種選擇是從頭開始編寫自己的適配器。 BaseAdapter實現BaseAdapter類。 雖然不太令人生畏,但對於那些剛學習Android或不確定適配器通常如何工作的人來說,這可能是一個挑戰。 此解決方案還需要您實施所有過濾代碼。

最后,第三個選擇是使用第三方庫。 我建議使用AbsArrayAdapter類。 您基本上將在此處執行第一個選項的操作,但可以選擇指定如何過濾Foo對象。 它還不受Android ArrayAdapter的過濾錯誤的困擾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM