Java import error "type android.widget.Filter.FilterResults not showing"

This question has already been asked: the type android.widget.Filter.FilterResults is not displayed. But there was no answer, and now I have the same problem. There was something mentioned in this discussion that variables are marked final when they shouldn't be for 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();
                }
            }
        }
    }

}

, ( ), . , android.widget.Filter.FilterResults; "" , , , . "" ArrayLists, , " android.widget.Filter.FilterResults ". ?

Item:

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

, , "" , , ugh.

+3
1

, , :

Eclipse , "import android.widget.Filter.FilterResults;" "import android.widget.Filter". , "import android.widget.Filter", Filter.FilterResults. , , , .

+2

All Articles