Java import error “android.widget.filter.filterresults type is not visible”

This question has been asked: the type android.widget.filter.filterresults is not visible, but there is no clear answer. Now I have encountered the same problem. In that discussion, there are some contents about variables marked final when they should not be used for getfilter... Well, this 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 deleted other parts (buttons and their touch listeners) that are not very interested in this problem. I have no errors except importing Android. Widget. Filter. Filterresults; I tried to remove "final" from the adapter, but this gave me an error, saying that they must be final. I have tried to remove "final" from ArrayLists, but nothing has been changed. There is still an error when importing "type Android. Widget. Filter. Filterresults is invisible". What else can be wrong?

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

I can't ask why the solution is in another article. I don't have enough "reputation" to comment here, eh

resolvent:

From my previous comments on the original question, go back and mark that it has been answered:

Eclipse automatically adds additional unnecessary "import Android. Widget. Filter. Filterresults;" after "import Android. Widget. Filter". It is enough to have "import Android. Widget. Filter", so just comment out or delete the second import of filter. Filterresults. Once I do this, there are no more errors, and all errors work as expected

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>