2017-02-17 23 views
0

У меня есть пользовательский адаптер, используя ArrayAdapter, но я не знаю, как установить фильтр для всех значений. Это мой собственный код адаптераПолучить опцию фильтра в адаптере Custom Array в 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; 

} 
} 

Загрузка данных:

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

} 

Вызов массива адаптер:

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

Возможный дубликат [Filter ListView с arrayadapter] (http://stackoverflow.com/questions/10532194/filter-listview-with-arrayadapter) – petey

+0

HI, у меня есть несколько массивов, Как я могу искать строку в этом массиве, и я хочу искать контент как в sim no, так и на мобильном телефоне? – Kalanidhi

+0

this.simNo = (String []) объект [0]; this.mobileNo = (String []) объект [1]; this.data = (String []) object [2]; – Kalanidhi

ответ

1

использовать класс фильтра https://developer.android.com/reference/android/widget/Filter.html , например, в адаптере реализовать интерфейс Фильтруемые

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

Я надеюсь, что это помогает

+0

Привет, но у меня есть два массива. Как я могу назначить эти два значения для 'result.values' – Kalanidhi

+0

, вы можете создать класс для менеджера двумя значениями, которые вам нужны –

 Смежные вопросы

  • Нет связанных вопросов^_^