Edited...
I am trying to filter an adapter from a search view. I know what I have is close, but not quite there. I am getting this error message, with the code below.
LogCat
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40f0f2a0)
E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at ---$FreeAgentPagerAdapter.getCount(---.java:403)
at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:813)
at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2688)
at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:276)
at ---$FreeAgentPagerAdapter$1.publishResults(---.java:434)
SearchView
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.in_game, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) searchItem.getActionView();
setupSearchView(searchItem);
if (mState == 0) {
menu.findItem(R.id.action_search).setVisible(false);
}
return true;
}
private void setupSearchView(MenuItem searchItem) {
if (isAlwaysExpanded()) {
mSearchView.setIconifiedByDefault(false);
} else {
searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}
mSearchView.setOnQueryTextListener(this);
}
String newText = "";
public boolean onQueryTextChange(String newText) {
Toast.makeText(getBaseContext(), "Query = " + newText, Toast.LENGTH_SHORT).show();
return false;
}
public boolean onQueryTextSubmit(String query) {
Adapter.getFilter().filter(newText.toString());
return false;
}
protected boolean isAlwaysExpanded() {
return false;
}
Adapter
public class AdapterFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment, container, false);
ViewPager = (ViewPager) rootView.findViewById(R.id.Pager);
Adapter = new PagerAdapter(getChildFragmentManager());
ViewPager.setAdapter(Adapter);
return rootView;
}
}
public class PagerAdapter extends FragmentStatePagerAdapter {
private List TITLES = new ArrayList();
private Map ReferenceMap;
public PagerAdapter(FragmentManager fm) {
super(fm);
ReferenceMap = new HashMap();
TEST.add("TESTING");
for (Test test : test.getTest()) {
TEST.add(test.getTest());
}
}
@Override
public CharSequence getTitle(int i) {
return TEST.get(i);
}
@Override
public int getCount() {
return TEST.size();
}
@Override
public Fragment getItem(int i) {
Fragment Fragment = Fragment.newInstance(test.getId(), TEST.get(i));
ReferenceMap.put(i, (Fragment) Fragment);
return Fragment;
}
public FiltaddDropFragmentlter() {
return new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
Toast. makeText(getBaseContext(), "Publishing " + constraint, Toast.LENGTH_LONG).show();
TEST = (List<String>) results.values;
Adapter.notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
Toast.makeText(getBaseContext(), "Filtering " + constraint, Toast.LENGTH_LONG).show();
List<String> filteredResults = getFilteredResults(constraint);
FilterResults results = new FilterResults();
results.values = filteredResults;
return results;
}
};
}
}
private List<String> getFilteredResults(CharSequence constraint) {
return null;
}
Would anyone be able to point out what I'm doing wrong? I think I just need a second pair of eyes to look this over. What should I be doing differently and how can I do this the best way?
Three steps:
Filter
. Implement the performFiltering()
method.publishResults()
method to exchange your list data and call notifyDataSetChanged()
on your adapterFilterable
interface and define the getFilter()
method. It should return an instance of your new filter class that you made in step 1.performFiltering
will be processed on a background thread, and publishResults
will be called from the UI thread.
I'm looking for the sample code that helped me learn list filtering. If I find it I'll post a link.