0

私はカスタムリストビューをフィルタリングしようとし、フィルタのコードを書いた後に

そしてそれを呼び出すとき

    JobsListAdapter.getFilter().filter(s.toString().toLowerCase());

そして問題は言った

タイプ JobsListAdapter から非静的メソッド getFilter() への静的参照を作成できません

public Filter getFilter()
        {
            if(filter == null)
                filter = new MangaNameFilter();
            return filter;
        }

     public  class MangaNameFilter extends Filter
        {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                // NOTE: this function is *always* called from a background thread, and
                // not the UI thread.
                constraint = constraint.toString().toLowerCase();
                FilterResults result = new FilterResults();
                if(constraint != null && constraint.toString().length() > 0)
                {
                    ArrayList<Jobs> filt = new ArrayList<Jobs>();
                    ArrayList<Jobs> lItems = new ArrayList<Jobs>();
                    synchronized (this)
                    {
                        lItems.addAll(values);
                    }
                    for(int i = 0, l = lItems.size(); i < l; i++)
                    {
                        Jobs m = lItems.get(i);
                        if(m.name.toLowerCase().contains(constraint))
                            filt.add(m);
                    }
                    result.count = filt.size();
                    result.values = filt;
                }
                else
                {
                    synchronized(this)
                    {
                        result.values = values;
                        result.count = values.size();
                    }
                }
                return result;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                // NOTE: this function is *always* called from the UI thread.
                filtered = (ArrayList<Jobs>)results.values;
                notifyDataSetChanged();
                clear();
                for(int i = 0, l = filtered.size(); i < l; i++)
                    add(filtered.get(i));
                notifyDataSetInvalidated();
            }

        }

私を助けてください

4

2 に答える 2

2

それが言うことだけ。メソッドをstatic作成するか、クラスのインスタンスを作成してその方法でメソッドにアクセスする必要があります。何かのようなもの

JobsListAdapter myClass = new JobsListAdapter();  // enter your params for the constructor
myClass.getFilter().filter(s.toString().toLowerCase());

または、メソッドのシグネチャを変更して、static必要な場合とそうでない場合がある修飾子を含めます。

    public static Filter getFilter()
    {
        if(filter == null)
            filter = new MangaNameFilter();
        return filter;
    }

役立つかもしれないいくつかのリンク

メソッドを静的にする場合

インスタンスとクラスのメンバーについて

于 2013-08-26T20:32:53.277 に答える
0

フィルターのインスタンスを 1 つだけ取得しようとしている場合は、そうする必要があります。

public static Filter getFilter()

また

new JobsListAdapter().getFilter().filter(s.toString().toLowerCase());

必要なものに応じて。

于 2013-08-26T20:33:11.817 に答える