2016-04-07 37 views
1

Filtred liste görünümünden nasıl bir öğe alabilirim? Örneğin, liste görünümü 10 öğeye sahibim (Club 1.2.3 ...). benim liste görünümü, int noktasına gitme 0 Club 4 var ama 3 dönmek gerekiyor "4" filtre sonra (0'dan saymak), ListView'de filtrelenmiş öğe konumuna getiriliyor

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; 

    } 

DÜZENLEME:

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; 
     } 
    }); 

} 
+0

Listeyi filtreleme biçiminiz hakkında daha fazla bilgi verebilir misiniz? –

+0

Tamam, düzenlenmiş ................ – orafix

cevap

0

Ben oluşturup gerektiğini düşünüyorum ArrayAdapter öğesini genişleten ve Filtrelenebilir özelliğini uygulayan özel ArrayAdapter'iniz, sonra da GetFilter yöntemini Filter'in uzantısına sahip kendi CustomFilter'ınız ile geçersiz kılar.

Orijinal dizinizi koruyabilir ve filtrelemek için normal diziyi kullanabilirsiniz, böylece değeri arayabilir, size bir örnek verebilirim.

ArrayAdapter

geçersiz kıl getFilter

@Override 
public Filter getFilter() { 
    if (filter == null) { 
     filter = new PickerAdapterFilter(); 
    } 
    return filter; 
} 

Ve 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 

CustomFilter içinde

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 
} 

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(); 
     } 
    } 

} 
+0

Cevabınız için teşekkür ederim, ancak daha kolay yapmaya çalışıyorum. Arama filtresi, orijinalim yerine yeni bir liste görünümü oluşturuyor, bu yüzden bu orijinal belgeye referans göstermem veya bir kopyasını almam gerekiyor, ve bence, sanırım;) – orafix

0

Bunu farklı şekilde çözdüm. Öğeyi pozisyonda değil, pozisyonda kullandım.

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(); 
}