2017-02-17 3 views
0

Ich habe einen benutzerdefinierten Adapter mit ArrayAdapter, aber ich weiß nicht, wie Filter für alle Werte festgelegt werden. Das ist mein benutzerdefinierten Adapter CodeFilter Option in Custom Array Adapter in Android?

public class ListAdapter extends ArrayAdapter<String> { 

String[] simNo, mobileNo, data; 
Activity activity; 

public ListAdapter(Activity activity, Object object[]) { 
    super(activity, R.layout.search_data, (String[]) object[0]); 
    this.simNo = (String[]) object[0]; 
    this.mobileNo = (String[]) object[1]; 
    this.data = (String[]) object[2]; 
    this.activity = activity; 
} 

@Override 
public View getView(final int position, View view, ViewGroup parent) { 
    String DELIMITER = " : "; 
    LayoutInflater inflater = activity.getLayoutInflater(); 
    view = inflater.inflate(R.layout.search_data, null, true); 
    ((TextView) view.findViewById(R.id.sim_no_text)).setText("Sim Number"+DELIMITER+simNo[position]); 
    ((TextView) view.findViewById(R.id.mob_no_text)).setText("Mobile Number"+DELIMITER+mobileNo[position]); 
    ((TextView) view.findViewById(R.id.data)).setText(data[position]); 
     return view; 

} 
} 

Laden von Daten:

public Object[] formListViewDetails(JSONObject result) { 

    int noOfSim; 
    noOfSim = result.optInt("no_of_sims"); 
    String[] data, simNo, mobileNo; 
    simNo = new String[noOfSim]; 
    mobileNo = new String[noOfSim]; 
    data = new String[noOfSim]; 
    try { 
     JSONArray totalData = result.getJSONArray("sim_details"); 
     for (int i = 0; i < noOfSim; i++) { 
      simNo[i] = totalData.optJSONObject(i).optString("sim_no"); 
      mobileNo[i] = totalData.optJSONObject(i).optString("mobile_no"); 
      data[i] = totalData.optJSONObject(i).toString(); 
     } 
     return new Object[]{simNo, mobileNo, data}; 
    } catch (Exception e) { 
     Log.d(TAG, "formListViewDetails: " + e.toString()); 
     return null; 
    } 

} 

Aufruf Array Adapter:

listAdapter = new ListAdapter(this, formListViewDetails(result)); 
listView.setAdapter(listAdapter); 
+0

Mögliche Duplikat [Filter Listview mit arrayadapter] hilft (http://stackoverflow.com/questions/10532194/filter-listview-with-arrayadapter) – petey

+0

HALLO, Ich habe eine mehrere Array, Wie kann ich einen String in diesem Array suchen und den Inhalt sowohl in der SIM-Nummer als auch in der Handynummer suchen? – Kalanidhi

+0

this.simNo = (String []) Objekt [0]; this.mobileNo = (String []) Objekt [1]; this.data = (String []) Objekt [2]; – Kalanidhi

Antwort

1

der Filterklasse verwenden https://developer.android.com/reference/android/widget/Filter.html zum Beispiel in Ihrem Adapter implementieren Schnittstelle Filterbare

public class ListAdapter extends ArrayAdapter<String> implements 
    Filterable { 
. 
. 
. 
    @Override 
    public Filter getFilter() { 
    if (mFilter == null) 
     mFilter = new LocalFilter(); 

    return mFilter; 
    } 
    private class LocalFilter extends Filter { 

    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     FilterResults results = new FilterResults(); 
     // We implement here the filter logic 
     if (constraint == null || constraint.length() == 0) { 
      // No filter implemented we return all the list 
      results.values = arrayString; 
      results.count = arrayString.size(); 
     } else { 
      // We perform filtering operation 
      List<Local> nArrayList = new ArrayList<Local>(); 
      for (String item : mStrings) { 
       if (item.toUpperCase() 
         .contains(constraint.toString().toUpperCase())) 
        nArrayList.add(local); 
      } 

      results.values = nArrayList; 
      results.count = nArrayList.size(); 
     } 
     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, 
      FilterResults results) { 
     // Now we have to inform the adapter about the new list filtered 
     mStrings = (ArrayList<String>) results.values; 
     notifyDataSetChanged(); 
    } 
} 

Ich hoffe, es

+0

Hallo, aber ich habe ein zwei Array, Wie kann ich diese beiden Werte zu "result.values" – Kalanidhi

+0

zuweisen können Sie eine Klasse für Manager die beiden Werte, die Sie brauchen –