我的android应用程序中显示了联系人列表。我想创建一个seachbox。如何遍历列表视图并删除项目?
我的代码如下所示:我的android应用程序中显示了联系人列表。我想创建一个seachbox。如何遍历列表视图并删除项目?,android,listview,android-studio,search-box,iterate,Android,Listview,Android Studio,Search Box,Iterate,我的代码如下所示: public class MainActivity extends ListActivity { @Override public int getSelectedItemPosition() { return super.getSelectedItemPosition(); } @Override public long getSelectedItemId() { return super.getSelectedItemId(); } ListV
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)方法进行搜索,但我不知道如何遍历列表并删除不以searchtext开头的项目。mySearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
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;
}
});
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
//根据搜索文本从数据库中检索列表,例如名称为Test。
//并将列表传递给适配器
ArrayList searchArrayList=myDbHandler.getSearchList(查询);
if(searchArrayList!=null){
myAdapter=新适配器(Activity.this,searchArrayList);
myListView.setAdapter(myAdapter);
}
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
//当serach文本为空时,显示包含整个数据的Arraylist
if(newText.isEmpty()){
myAdapter=新适配器(Activity.this,myInfoArrayList);
myListView.setAdapter(myAdapter);
}
返回false;
}
});
如果您有模型的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;
}
私有上下文;
//通过addItems函数传递给适配器的数据的Arraylist
私有列表数组列表;
//这是arrayList中用于保存搜索结果并返回的副本列表
私人名单;
/**
*适配器类的Custructor
*@param上下文
*/
公共适配器列表(上下文){
this.context=上下文;
this.arrayList=新的arrayList();
copyList=newarraylist();
}
/**
*用于将模型列表传递给适配器的函数
*@param arrayList
*/
公共无效附加项(ArrayList ArrayList){
this.arrayList=arrayList;
对于(int i=0;i
现在在片段/活动中添加此函数,并在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) {
}
});
}
private void setAutoSuggestionText(){
editText.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
if(适配器列表!=null){
ArrayList mArrayList=adapterListing.onTextChange(“+s”);
if(mArrayList!=null&&mArrayList.size()!=0){
mListView.setVisibility(View.VISIBLE);
}否则{
mListView.setVisibility(View.GONE);
}
}
}
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
}
这里,我使用的变量指向:
编辑文本-您的编辑文本视图
mListView-必须在其中创建搜索功能的列表视图
适配器列表-需要搜索的模型类的ArrayList
模型-这是要生成ArrayList的对象类
这就是我在ListView中搜索的逻辑