2017-01-30 9 views
-1

Мой код выглядит следующим образом:У меня есть список контактов, которые появляются в моем приложении Android. Я хочу создать seachbox. Как я могу перебирать список и удалять элементы?

public class MainActivity extends ListActivity { 


@Override 
public int getSelectedItemPosition() { 
    return super.getSelectedItemPosition(); 
} 

@Override 
public long getSelectedItemId() { 
    return super.getSelectedItemId(); 
} 

ListView lv; 
Cursor cursor1; 
EditText editText; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editText = (EditText)findViewById(R.id.txtsearch); 

    initList(); 

    editText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      if (s.toString().equals("")){ 
       //reset listview 
       initList(); 
      } 
      else{ 
       //perform search 
       searchItem(s.toString()); //Searchitem 
      } 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

} 

public void initList(){ 
    cursor1 = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null , null , null , null); 
    startManagingCursor(cursor1); 

    String[] from = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone._ID}; 
    int[] to = {android.R.id.text1, android.R.id.text2}; 

    SimpleCursorAdapter listadapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor1, from, to); 
    setListAdapter(listadapter); 

    lv = getListView(); 
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

} 

public void searchItem(String textToSearch) { 
    //how should I iterate through the listview and remove items that do not start with "textToSearch" 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 


} 

Я хотел бы сделать поиск с помощью метода searchItem (String), но я не знаю, как перебрать список и удалить элементы, которые делают не начинайте с поиска.

ответ

0
mySearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 

       // Serach the list from database based on Search Text, Eg Name is Test. 
       // and pass the list to the adapter 
       ArrayList<ShortInfo> searchArrayList = myDbHandler.getSearchList(query); 
       if (searchArrayList != null) { 

        myAdapter = new Adapter(Activity.this, searchArrayList); 
        myListView.setAdapter(myAdapter); 


       } 
       return false; 
       } 

      @Override 
      public boolean onQueryTextChange(String newText) { 

       // Display Arraylist which contains whole data, when serach text is empty 
       if (newText.isEmpty()) { 
        myAdapter = new Adapter(Activity.this, myInfoArrayList); 
        myListView.setAdapter(myAdapter); 

       } 
       return false; 
       } 
     }); 
0

Если у вас есть ArrayList модели, и вы используете его для показа в ListView и хотите найти, то сделать так:

В пользовательском классе адаптера:

private Context context; 
//Arraylist of data which you had passed to adapter by addItems function 
private List<Model> arrayList; 
//This is the copy list from arrayList to save result of search and return 
private List<Model> copyList; 

/** 
* Custructor of adapter class 
* @param context 
*/ 
public AdapterListing(Context context) { 
    this.context = context; 
    this.arrayList = new ArrayList<Model>(); 
    copyList = new ArrayList<Model>(); 
} 

/** 
* Function used for passing arralist of model to adapter 
* @param arrayList 
*/ 
public void addItems(ArrayList<Model> arrayList) { 
    this.arrayList = arrayList; 
    for (int i = 0; i < arrayList.size(); i++) { 
     copyList.add(arrayList.get(i)); 
    } 
    notifyDataSetChanged(); 
} 

/** 
* Search here 
* @param text 
* @return 
*/ 
public ArrayList<Model> onTextChange(String text) { 
    arrayList.clear(); 
    if (copyList == null) 
     return null; 

    if (text.isEmpty()) { 
     arrayList.addAll(copyList); 
    } else { 
     for (Model model : copyList) { 
      if (model.name.toLowerCase(new Locale(text)) 
        .contains(text.toLowerCase(new Locale(text)))) { 
       arrayList.add(model); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
    return arrayList; 
} 

В настоящее время в ваш Fragment/Activity добавляет эту функцию и делает вызов после ссылки на editText:

private void setAutoSuggestionText() { 
    editText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (adapterListing != null) { 
       ArrayList<Model> mArrayList = adapterListing.onTextChange("" + s); 
       if (mArrayList != null && mArrayList.size() != 0) { 
        mListView.setVisibility(View.VISIBLE); 
       } else { 
        mListView.setVisibility(View.GONE); 
       } 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
} 

Вот мои используемых переменных указывает на:

EditText - ваш EdittextView

mListView - ListView, в которой вы должны создать функцию поиска

adapterListing - ArrayList модельного класса, в котором поиск требуется

Модель - Это класс объекта для создания ArrayList

Так что это моя логика поиска в ListView.