質問

私は、ユーザーがクエリを検索するときに、フィルタリングされているBaseadapter(一致する項目のみが表示されます)でListViewを実装しましたが、検索バーにテキストがもうないと検索アクションが閉じられている場合は、mすべての項目を持つListViewをリセットできません。私は以下のコードを投稿しています。誰かがListViewをリセットする方法を私に助けてくれることができます。私は、空の文字列を渡すことによってoncloseListenerのonclose()メソッドのフィルタ()を呼び出しましたが、それは助けをしません。

活動クラス

    public class MainPage extends ActionBarActivity {
    MainPageAdapter mainPageAdapter;


    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_page);

        mainPageAdapter = new MainPageAdapter();
        ListView listView = (ListView)findViewById(R.id.main_list);
        listView.setAdapter(mainPageAdapter);
        listView.setTextFilterEnabled(true);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(getApplicationContext(), StatePage.class);
                intent.putExtra("page number", i);
                startActivity(intent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
//        getMenuInflater().inflate(R.menu.main_page, menu);
//        return true;
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_main_actions, menu);
//        MenuItem menuItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setQueryHint("Search State..");

        SearchView.OnQueryTextListener textListener = new SearchView.OnQueryTextListener(){

            @Override
            public boolean onQueryTextSubmit(String s) {
                mainPageAdapter.getFilter().filter(s);
                return true;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                mainPageAdapter.getFilter().filter(s);
                return true;
            }
        };
        searchView.setOnQueryTextListener(textListener);

        SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener(){

            @Override
            public boolean onClose() {
                return false;
            }
        };
        searchView.setOnCloseListener(closeListener);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        switch(id)
        {
            case R.id.action_search:
                return true;
            case R.id.action_overflow:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
.

アダプタクラス

public class MainPageAdapter extends BaseAdapter implements Filterable {

    public ArrayList<String> alist = new ArrayList<String>();
    private QueryFilter queryFilter;
    ArrayList<String> temp;
    ArrayList<String> filterStateList;

    public MainPageAdapter()
    {
        Thread thread1 = new Thread(){
            public void run(){
                alist.add("Apple");
                alist.add("Samsung");
                alist.add("HTC");
                //list goes on...
                temp = alist;
            }
        };
        thread1.start();
    }

    @Override
    public int getCount() {
        if(alist != null){
            return alist.size();
        }
        else{
            return 0;
        }
    }

    @Override
    public Object getItem(int i) {
        if(alist != null){
            return alist.get(i);
        }
        else{
            return null;
        }
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    public boolean hasStableIds()
    {
        return true;
    }

    public int getViewTypeCount(){
        return 1;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if(view == null)
        {
            LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
            view = inflater.inflate(R.layout.state_list, viewGroup, false);
        }
        String state = alist.get(i);
        TextView stateTextView = (TextView)view.findViewById(R.id.state_view);
        stateTextView.setText(state);
        ImageView imageView = (ImageView)view.findViewById(R.id.flag_view);

        switch(i)
        {
            case 0:
                imageView.setImageResource(R.drawable.apple);
                break;
            case 1:
                imageView.setImageResource(R.drawable.samsung);
                break;
            case 2:
                imageView.setImageResource(R.drawable.HTC);
                break;
            //list goes on...
            default:
        }
        return view;
    }

    @Override
    public Filter getFilter() {
        if(queryFilter == null){
            queryFilter =  new QueryFilter();
        }
        return queryFilter;
    }

    private class QueryFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            FilterResults filterResults = new FilterResults();
            if(charSequence!= null && charSequence.length()> 0)
            {
                filterStateList = new ArrayList<String>();
                for(int i=0; i< temp.size(); i++)
                {
                    if((temp.get(i).toLowerCase().contains(charSequence.toString().toLowerCase())))
                    {
                        filterStateList.add(temp.get(i));
                    }
                }
                filterResults.count = filterStateList.size();
                filterResults.values = filterStateList;
            }
            else
            {
                filterResults.count = alist.size();
                filterResults.values = alist;
            }
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            alist = (ArrayList<String>) filterResults.values;
            notifyDataSetChanged();
        }
    }
}
.

役に立ちましたか?

解決

コードにフォローをフォローして、機能するかどうかを確認する

 final MenuItem searchMenuItem = optionsMenu.findItem(R.id.search);
final SearchView searchView =
        (SearchView) searchMenuItem.getActionView();

searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean queryTextFocused) {
        if(!queryTextFocused) {
            searchMenuItem.collapseActionView();
            searchView.setQuery("", false);
        }
    }
});
.

または以下の作業

       SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener(){

        @Override
        public boolean onClose() {
            mainPageAdapter.getFilter().filter("");
            return true;
        }
    };
.

他のヒント

のようなものをたくさん試すことができます
listView.setAdapter(null);
adapter.clear(); adapter.notifyDataSetChanged() 
yourcollection.clear(); adapter.notifyDataSetChanged();
//this removes all the views from your layout inside a tag like linearlayout
linearlayout.removeAllViews();
.

あなたに最も合うものを使う

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top