java import error "the type android.widget.Filter.FilterResults is not visible"

android, importerror, java

Solution

Coming back to this to mark it as answered, from my previous comment on the original question:

Eclipse automatically adds that extra unneeded "import android.widget.Filter.FilterResults;" after "import android.widget.Filter". It's enough to have "import android.widget.Filter", so just comment out or delete the second import for Filter.FilterResults. Once I did that there were no more errors and all was working as expected.

Problem

This question was already asked: the type android.widget.Filter.FilterResults is not visible But there was no clear answer, and now I'm getting the same problem. In that discussion there was something mentioned about variables being marked as final when they shouldn't be for the getFilter... Well, here is my code: ``` package com.example.project; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Locale; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.NavUtils; import android.text.Editable; import android.text.TextWatcher; import android.util.DisplayMetrics; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Filter; import android.widget.Filter.FilterResults; import android.widget.Filterable; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class PlacesMain extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PreferenceManager.setDefaultValues(this, R.xml.preferences, false); SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); String localePref = sharedPref.getString("pref_locale", ""); Configuration conf = getResources().getConfiguration(); conf.locale = new Locale(localePref); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); Resources resources = new Resources(getAssets(), metrics, conf); setContentView(R.layout.activity_places_main); final ListView listview = (ListView) findViewById(R.id.listView1); final EditText edittext = (EditText) findViewById(R.id.editText1); String[] galilee = getResources().getStringArray(R.array.galilee_places); String[] judea = getResources().getStringArray(R.array.judea_places); String[] galilee_en = new String[galilee.length]; String[] judea_en = new String[judea.length]; if(localePref != "en"){ Locale current = conf.locale; conf.locale = new Locale("en"); metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); Resources resources_en = new Resources(getAssets(), metrics, conf); galilee_en = resources_en.getStringArray(R.array.galilee_places); judea_en = resources_en.getStringArray(R.array.judea_places); conf.locale = current; getWindowManager().getDefaultDisplay().getMetrics(metrics); resources = new Resources(getAssets(), metrics, conf); } else{ galilee_en = galilee; judea_en = judea; } final ArrayList<Item> galileeArrayList = new ArrayList<Item>(); final ArrayList<Item> judeaArrayList = new ArrayList<Item>(); final ArrayList<Item> allArrayList = new ArrayList<Item>(); for (int i = 0; i < galilee.length; ++i) { galileeArrayList.add(new Item(galilee[i],galilee_en[i],i)); allArrayList.add(new Item(galilee[i],galilee_en[i],i)); } for (int i = 0; i < judea.length; ++i) { judeaArrayList.add(new Item(judea[i],judea_en[i],i)); allArrayList.add(new Item(judea[i],judea_en[i],i)); } Collections.sort(galileeArrayList,new Comparator<Item>(){ public int compare(Item o1, Item o2){ return o1.getPlace().compareTo(o2.getPlace()); } }); Collections.sort(judeaArrayList,new Comparator<Item>(){ public int compare(Item o1, Item o2){ return o1.getPlace().compareTo(o2.getPlace()); } }); Collections.sort(allArrayList,new Comparator<Item>(){ public int compare(Item o1, Item o2){ return o1.getPlace().compareTo(o2.getPlace()); } }); final ItemAdapter all_adapter = new ItemAdapter(this, android.R.layout.simple_list_item_1,allArrayList); final ItemAdapter galilee_adapter = new ItemAdapter(this, android.R.layout.simple_list_item_1,galileeArrayList); final ItemAdapter judea_adapter = new ItemAdapter(this, android.R.layout.simple_list_item_1,judeaArrayList); listview.setTextFilterEnabled(true); listview.setAdapter(all_adapter); edittext.addTextChangedListener(new TextWatcher(){ @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub String mytext = edittext.getText().toString(); all_adapter.getFilter().filter(s); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); } private class ItemAdapter extends ArrayAdapter<Item> implements Filterable { private final Object mLock = new Object(); private ItemsFilter mFilter; private ArrayList<Item> mItems; public ItemAdapter(Context context, int textViewResourceId, ArrayList<Item> mItems) { super(context, textViewResourceId, mItems); this.mItems = mItems; } @Override public View getView (int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); Item i = mItems.get(position); if(i != null){ TextView text1 = (TextView) view.findViewById(android.R.id.text1); text1.setText(i.getPlace()); view.setTag(i.getPlaceEn()); } return view; } public Filter getFilter(){ if (mFilter == null){ mFilter = new ItemsFilter(); } return mFilter; } private class ItemsFilter extends Filter { protected FilterResults performFiltering(CharSequence prefix) { //Initiate our results object FilterResults results = new FilterResults(); // If the adapter array is empty, check the actual items array and use it if (mItems == null) { synchronized (mLock) { // Notice the declaration above mItems = new ArrayList<Item>(); } } // If no prefix is sent to the filter we'll send back the original array if(prefix == null || prefix.length() == 0){ synchronized (mLock) { results.values = mItems; results.count = mItems.size(); } } else{ // compare lower case strings String prefixString = prefix.toString().toLowerCase(); ArrayList<Item> items = mItems; final int count = items.size(); final ArrayList<Item> newItems = new ArrayList<Item>(count); for (int i = 0; i < count; i++){ final Item item = items.get(i); final String itemPlace = item.getPlace().toLowerCase(); // First match against the whole, non splitted value if (itemPlace.startsWith(prefixString)){ // TODO this index won't be correct, need separate index from loop increment newItems.add(new Item(item.getPlace(),item.getPlaceEn(),i)); } else{ } } // Set and return results.values = newItems; results.count = newItems.size(); } return results; } @SuppressWarnings("unchecked") protected void publishResults(CharSequence prefix, FilterResults results){ //noinspection unchecked mItems = (ArrayList<Item>) results.values; // Let the adapter know about the updated list if(results.count > 0){ notifyDataSetChanged(); } else{ notifyDataSetInvalidated(); } } } } } ``` This is the main part of the code, I cut out other parts (buttons and their touch listeners) that are less interesting to this problem. I have no errors except on the import for android.widget.Filter.FilterResults; I have tried taking "final" off of the adapters, but that gives me errors saying that they have to be final. I have tried taking "final" off of the ArrayLists, but that didn't change anything, still have the error in the import "the type android.widget.Filter.FilterResults is not visible". What else can be wrong with this? I'm using my own custom Item class: ``` public class Item { private String place; private String placeEn; private int id; public Item(String place, String placeEn, int id) { this.place = place; this.placeEn = placeEn; this.id = id; } public String getPlace() { return place; } public String getPlaceEn() { return placeEn; } public int getId(){ return id; } public void setPlace(String place){ this.place = place; } public void setPlaceEn(String placeEn){ this.placeEn = placeEn; } public void setId(int id){ this.id = id; } } ``` And I can't ask on the other post what the solution was cause I don't have enough "reputation" on here to make comments yet, ugh.

Original source