[英]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.