2015-07-10 3 views
0

Итак, у меня есть следующий ListView адаптер:фильтр ListView с SearchView

ListViewAdapter.java

public class ListViewAdapter extends CursorAdapter{ 
    public ListViewAdapter(Context context, Cursor cursor) { 
     super(context, cursor, 0); 
    } 


    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     return LayoutInflater.from(context).inflate(R.layout.listitem, parent, false); 
    } 


    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     // Find fields to populate in inflated template 
     Button btnList = (Button) view.findViewById(R.id.btnList); 
     // Populate fields with cursor 
     btnList.setText(cursor.getString(0)); 

    } 
} 

И вот XML я накачивания:

ListItem. xml

<?xml version="1.0" encoding="utf-8"?> 
<Button xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/btnList" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/listview_item" 
android:focusable="false" 
android:clickable="false" 
android:focusableInTouchMode="false"/> 

И тогда я использую его здесь, чтобы дать ListView содержимое курсора:

MainActivity.java

ListViewAdapter lvAdapter = new ListViewAdapter(this, cursor); 
listView.setAdapter(lvAdapter); 

Теперь, как бы один использовать SearchView для фильтрации ListView каждый раз я меняю Искать в тексте? (Как onTextChange или что-то)?

я придумал с этим до сих пор:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      todoAdapter.getFilter().filter(newText); 
      return true; 
     } 
}); 

Но это не делает ничего ... Если вам нужна дополнительная информация, не стесняйтесь спросить :)

My Layout : My current Layout.

ответ

0

Я думаю, вы должны использовать этот THis является частью моего проекта, я в настоящее время работаю над Вот два ArrayLists один showPr ojectList и другой список проектов projectlist содержит фактические данные, которые вы хотите фильтровать, и showprojectlist содержит данные из списка проектов, который фильтруется и который должен быть показан.

searchview.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

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

       } 

       @Override 
       public void afterTextChanged(Editable s) { 
        if (searchview.getText().toString().length() == 0) { 
         showProjectList = projectList; 
         ProjectAdapter adapter = new ProjectAdapter(getInstance(), showProjectList); 
         projectListView.setAdapter(adapter); 

         noOfProjectFoundTextView.setText(showProjectList.size() + ""); 
         noProjectFoundLayout.setVisibility(View.GONE); 

        } else { 
         showProjectList = new ArrayList<ProjectModel>(); 
         showProjectList.clear(); 
         for (int i = 0; i < projectList.size(); i++) { 
          if (projectList.get(i).getProjectName() 
            .toString() 
            .toLowerCase() 
            .startsWith(
              searchview.getText().toString().toLowerCase()) || projectList.get(i).getProjectName() 
            .toString() 
            .toLowerCase() 
            .contains(
              searchview.getText().toString().toLowerCase())) { 

           ProjectModel mData = new ProjectModel(); 
           mData.projectId = projectList.get(i).getProjectId(); 
           mData.itemCount = projectList.get(i).getItemCount(); 
           mData.projectName = projectList.get(i).getProjectName(); 
           mData.createdDate = projectList.get(i).createdDate; 
           mData.lInfoList = projectList.get(i).getlInfoList(); 

           showProjectList.add(mData); 


          } 
         } 

         ProjectAdapter adapter = new ProjectAdapter(getInstance(), showProjectList); 
         projectListView.setAdapter(adapter); 

        } 

       } 
      });//search ended 
0

Хорошо, скажем, у вас есть арраист по имени mainArrayList. Итак, теперь вы хотите что-то искать. Создайте метод (скажем, mySearch (String str)) и передайте строку поиска в качестве параметра. Возьмите новый arraylist, объявленный глобально, пройдите через ваш mainArrayList &, проверьте, содержат ли элементы maiArrayList строку, если ваш mainArrayList продолжает строку, затем добавьте элемент в новый arraylist и используйте новый arraylist в вашем listView.

также добавить недавно реализованный метод MySearch (String ул) внутри

@Override 
    public boolean onQueryTextChange(String newText) 
    { mySearch(newText); 

     return true; 
    } 
Смежные вопросы