[英]get position filtred item in ListView
如何從過濾列表視圖中獲取項目位置? 例如,我有列表視圖 10 個項目(俱樂部 1.2.3...)。 過濾“4”后,我的列表視圖中有 Club 4,int 位置返回 0,但我需要返回 3(從 0 開始計數)
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
FragmentManager fragmentManager = getFragmentManager();
// dont't work
int pos = (Integer) getListAdapter().getItem(position);
switch (pos){
case 0:
fragmentManager.beginTransaction().replace(R.id.content_frame, new Club0Fragment()).commit();
break;
case 1:
fragmentManager.beginTransaction().replace(R.id.content_frame, new Club1Fragment()).commit();
break;
}
編輯:
public class NavigationSecondFragment extends ListFragment {
public NavigationSecondFragment() {
// Required empty public constructor
}
ArrayAdapter adapter;
String[] datasource = {"Club 1","Club 2","Club 3","Club 4","Club 5","Club 6","Club 7","Club 8","Club 9","Club 10","Club 11","Club 12", "Club 13"};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_navigation_second, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,datasource);
setListAdapter(adapter);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.menu_search,menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (adapter != null) {
adapter.getFilter().filter(newText);
}
return true;
}
});
}
我認為您需要創建擴展 ArrayAdapter 的自定義 ArrayAdapter 並實現 Filterable,然后使用您自己的擴展 Filter 的 CustomFilter 覆蓋方法 getFilter。
你可以保留你原來的數組,用普通數組過濾,這樣你就可以搜索值了,我舉個例子。
陣列適配器
public PickerAdapter(Context context, ArrayList<String>) {
super(context, R.layout.picker_detail_row, alItemsPicker);
this.alItemsPicker = alItemsPicker; //This array is variable, and modified by CustomFilter
this.alItemsPickerInicial = alItemsPicker; //This array is final, and its value is set in your constructor
}
覆蓋 getFilter
@Override
public Filter getFilter() {
if (filter == null) {
filter = new PickerAdapterFilter();
}
return filter;
}
並在您的 onListItemClick
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
int realposition = alItemsPickerInicial.indexOf(alItemsPicker.get(position))
....your custom code
自定義過濾器
private class PickerAdapterFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults resultados = new FilterResults();
if (constraint==null||constraint.length()==0) {
resultados.count = alItemsPickerInicial.size();
resultados.values = alItemsPickerInicial;
} else {
ArrayList<String> tmpAlItemsPicker = new ArrayList<String>();
for (String sItemPicker : alItemsPickerInicial) {
if (sItemPicker.contains(constraint)) {
tmpAlItemsPicker.add(htItemPicker);
}
}
resultados.count = tmpAlItemsPicker.size();
resultados.values = tmpAlItemsPicker;
}
return resultados;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
alItemsPicker = (ArrayList<String>)results.values;
if (results.count==0) {
notifyDataSetInvalidated();
} else {
notifyDataSetChanged();
}
}
}
我以不同的方式解決了這個問題。 我在位置使用項目,而不是項目的位置。
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
FragmentManager fragmentManager = getFragmentManager();
Object item = adapter.getItem(position);
if(item.equals(datasource[0])) fragmentManager.beginTransaction().replace(R.id.content_frame, new Club1Fragment()).commit();
if(item.equals(datasource[1])) fragmentManager.beginTransaction().replace(R.id.content_frame, new Club2Fragment()).commit();
Toast.makeText(getActivity(),item.toString(), Toast.LENGTH_SHORT).show();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.