Intereting Posts
Кнопки «Сделать» имеют одинаковую ширину в макете Лучший способ синхронизации контактов Панель инструментов AppCompat v7 Up / Back Arrow не работает Мобильный барьер развития для входа Как получить менеджер медиапроекции, не нарушая текущий процесс переднего плана, за исключением того, что он просит разрешить? Каков наилучший способ сделать перекрывающийся элемент в RecyclerView? ParseSdkContent failed Не удалось инициализировать класс android.graphics.Typeface Адаптер массива notifyDataSetChanged () не будет работать Как правильно загружать текстуры с помощью libgdx assetmanager Изменение шрифта заголовка приложения в android Почему softkeyboard не отображается во Фрагменте с помощью WebView Android capture photo putExtra (MediaStore.EXTRA_OUTPUT, Uri.fromFile (photoFile)); Данные равны нулю Как и где указать omx-декодер поддерживает туннелирование Не удалось разрешить все зависимости для конфигурации ': ParseStarterProject: classpath' Ошибки Android proguard

Как сбросить listview после того, как searchview закрыт в android?

Я реализовал listview с базовым адаптером, который фильтруется (отображаются только соответствующие элементы), когда пользователь выполняет поиск запроса, но когда в строке поиска больше нет текста, и действие поиска закрыто, я не могу Для сброса (вернуть все начальные элементы списка) listview со всеми элементами. Я отправляю свой код ниже. Может кто-нибудь помочь мне, как сбросить список. Я попытался вызвать filter () в методе OnCloseListener OnClose (), передав пустую строку, но это не помогает.

Класс активности

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

Класс адаптера

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

Примените следующее в своем коде и проверьте, работает ли оно,

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

Или последующие могут также работать

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

Вы можете попробовать много вещей, таких как:

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

Используйте то, что вам больше всего подходит.