Cómo restablecer listview después de searchview se cierra en android?

He implementado un listview con un baseadapter que se está filtrando (solo se muestran los elementos coincidentes) cuando el usuario busca una consulta, pero cuando no hay más texto en la barra de búsqueda y la acción de búsqueda está cerrada, no puedo para restablecer (recuperar todos los elementos listview inicial) el listview con todos los elementos. Estoy publicando mi código a continuación. ¿Puede alguien ayudarme cómo restablecer el listview. He intentado llamar el filtro () en el método onClose () de OnCloseListener pasando la cadena vacía pero no ayuda.

Clase de actividad

public class MainPage extends ActionBarActivity { MainPageAdapter mainPageAdapter; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_page); mainPageAdapter = new MainPageAdapter(); ListView listView = (ListView)findViewById(R.id.main_list); listView.setAdapter(mainPageAdapter); listView.setTextFilterEnabled(true); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = new Intent(getApplicationContext(), StatePage.class); intent.putExtra("page number", i); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.main_page, menu); // return true; MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.activity_main_actions, menu); // MenuItem menuItem = menu.findItem(R.id.action_search); SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setQueryHint("Search State.."); SearchView.OnQueryTextListener textListener = new SearchView.OnQueryTextListener(){ @Override public boolean onQueryTextSubmit(String s) { mainPageAdapter.getFilter().filter(s); return true; } @Override public boolean onQueryTextChange(String s) { mainPageAdapter.getFilter().filter(s); return true; } }; searchView.setOnQueryTextListener(textListener); SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener(){ @Override public boolean onClose() { return false; } }; searchView.setOnCloseListener(closeListener); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); switch(id) { case R.id.action_search: return true; case R.id.action_overflow: return true; default: return super.onOptionsItemSelected(item); } } } 

Clase del Adaptador

 public class MainPageAdapter extends BaseAdapter implements Filterable { public ArrayList<String> alist = new ArrayList<String>(); private QueryFilter queryFilter; ArrayList<String> temp; ArrayList<String> filterStateList; public MainPageAdapter() { Thread thread1 = new Thread(){ public void run(){ alist.add("Apple"); alist.add("Samsung"); alist.add("HTC"); //list goes on... temp = alist; } }; thread1.start(); } @Override public int getCount() { if(alist != null){ return alist.size(); } else{ return 0; } } @Override public Object getItem(int i) { if(alist != null){ return alist.get(i); } else{ return null; } } @Override public long getItemId(int i) { return i; } public boolean hasStableIds() { return true; } public int getViewTypeCount(){ return 1; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if(view == null) { LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); view = inflater.inflate(R.layout.state_list, viewGroup, false); } String state = alist.get(i); TextView stateTextView = (TextView)view.findViewById(R.id.state_view); stateTextView.setText(state); ImageView imageView = (ImageView)view.findViewById(R.id.flag_view); switch(i) { case 0: imageView.setImageResource(R.drawable.apple); break; case 1: imageView.setImageResource(R.drawable.samsung); break; case 2: imageView.setImageResource(R.drawable.HTC); break; //list goes on... default: } return view; } @Override public Filter getFilter() { if(queryFilter == null){ queryFilter = new QueryFilter(); } return queryFilter; } private class QueryFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence charSequence) { FilterResults filterResults = new FilterResults(); if(charSequence!= null && charSequence.length()> 0) { filterStateList = new ArrayList<String>(); for(int i=0; i< temp.size(); i++) { if((temp.get(i).toLowerCase().contains(charSequence.toString().toLowerCase()))) { filterStateList.add(temp.get(i)); } } filterResults.count = filterStateList.size(); filterResults.values = filterStateList; } else { filterResults.count = alist.size(); filterResults.values = alist; } return filterResults; } @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) { alist = (ArrayList<String>) filterResults.values; notifyDataSetChanged(); } } } 

aplique lo siguiente en su código y compruebe si funciona,

  final MenuItem searchMenuItem = optionsMenu.findItem(R.id.search); final SearchView searchView = (SearchView) searchMenuItem.getActionView(); searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean queryTextFocused) { if(!queryTextFocused) { searchMenuItem.collapseActionView(); searchView.setQuery("", false); } } }); 

o seguir también puede funcionar

  SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener(){ @Override public boolean onClose() { mainPageAdapter.getFilter().filter(""); return true; } }; 

Usted puede probar muchas cosas como:

 listView.setAdapter(null); adapter.clear(); adapter.notifyDataSetChanged() yourcollection.clear(); adapter.notifyDataSetChanged(); //this removes all the views from your layout inside a tag like linearlayout linearlayout.removeAllViews(); 

Usa lo que más te convenga.

  • Buscar EditarTexto de animación como la aplicación de Chrome
  • Buscar a través de RecyclerView usando Searchview
  • Cómo utilizar SearchView en la barra de herramientas de Android
  • OnActionExpandListener en menuitem no funciona. ¿Como arreglarlo?
  • Filtros de búsqueda y filtrar sugerencias
  • El uso de SearchView con AppCompatActivity genera fallas en la interfaz de usuario
  • Android: getSearchableInfo (getComponentName ()) devolviendo null?
  • El botón de la barra de acciones no se muestra en la vista de búsqueda de Android
  • Crear "historial" en SearchView en ActionBar
  • Android: haga que la barra de búsqueda completa pueda hacer clic
  • Android searchview setOnActionExpandListener en Honeycomb 3.2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.