I implemented listview with a base adapter that is filtered (only the relevant elements are displayed) when the user searches for the query, but when there is no more text in the search bar and the search action is closed, m cannot reset (return all the initial elements of the list) listview with all elements . I am posting my code below. Can someone help me how to reset listview. I tried calling filter () in the OnCloseListener onClose () method, passing an empty string, but that does not help.
Action class
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) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_actions, menu);
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) {
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);
}
}
}
Adapter class
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");
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;
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();
}
}
}
source
share