代码之家  ›  专栏  ›  技术社区  ›  TheDevMan

在Android操作栏中实现SearchView

  •  1
  • TheDevMan  · 技术社区  · 10 年前

    我已经在操作栏中实现了搜索,但我总是得到0个结果,即使文本可用。不知道我哪里出错了?

    这是我尝试过的一段代码:

        ArrayList<States> stateList = new ArrayList<States>();
    
        States _states = new States("AP","Andhra Pradesh",false);
        stateList.add(_states);
        _states = new States("DL","Delhi",true);
        stateList.add(_states);
        _states = new States("GA","Goa",false);
        stateList.add(_states);
        _states = new States("JK","Jammu & Kashmir",true);
        stateList.add(_states);
        _states = new States("KA","Karnataka",true);
        stateList.add(_states);
        _states = new States("KL","Kerala",false);
        stateList.add(_states);
        _states = new States("RJ","Rajasthan",false);
        stateList.add(_states);
        _states = new States("WB","West Bengal",false);
        stateList.add(_states);
        _states = new States("AP","Andhra Pradesh",false);
        stateList.add(_states);
        _states = new States("DL","Delhi",true);
        stateList.add(_states);
        _states = new States("GA","Goa",false);
    
        //create an ArrayAdaptar from the String Array
        dataAdapter = new MyCustomAdapter(this,R.layout.state_info, stateList);
        listView = (ListView) findViewById(R.id.listView1);
        // Assign adapter to ListView
        listView.setAdapter(dataAdapter);
        listView.setTextFilterEnabled(true);
    

    操作栏中的“我的搜索”选项:

    @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, menu);
        SearchManager searchManager = (SearchManager) getSystemService( Context.SEARCH_SERVICE );
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView();
    
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        //searchView.setSubmitButtonEnabled(true);
        searchView.setOnQueryTextListener(this);
    
        return super.onCreateOptionsMenu(menu);
    }
    
    @Override
    public boolean onQueryTextSubmit(String query) 
    {
        // TODO Auto-generated method stub
        return false;
    }
    
    @Override
    public boolean onQueryTextChange(String newText) 
    {
        // this is your adapter that will be filtered
        if (TextUtils.isEmpty(newText))
        {
            listView.clearTextFilter();
        }
        else
        {
            listView.setFilterText(newText.toString());
        }
    
        return true;
    }
    

    我的自定义适配器:

    private class MyCustomAdapter extends ArrayAdapter<States>
    {
    
        private ArrayList<States> stateList;
    
        public MyCustomAdapter(Context context, int textViewResourceId, 
    
                ArrayList<States> stateList) 
        {
            super(context, textViewResourceId, stateList);
            this.stateList = new ArrayList<States>();
            this.stateList.addAll(stateList);
        }
    
        private class ViewHolder
        {
            TextView code;
            CheckBox name;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
    
            ViewHolder holder = null;
    
            Log.v("ConvertView", String.valueOf(position));
    
            if (convertView == null)
            {
    
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
                convertView = vi.inflate(R.layout.state_info, null);
    
                holder = new ViewHolder();
                holder.code = (TextView) convertView.findViewById(R.id.code);
                holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1);
    
                convertView.setTag(holder);
    
                holder.name.setOnClickListener( new View.OnClickListener() 
                {
                    public void onClick(View v)  
                    {
                        CheckBox cb = (CheckBox) v;
                        States _state = (States) cb.getTag();
    
                        Toast.makeText(getApplicationContext(), "Clicked on Checkbox: " + cb.getText() + " is " + cb.isChecked(), 
                                Toast.LENGTH_LONG).show();
    
                        _state.setSelected(cb.isChecked());
                    }
                });
    
            }
            else
            {
                holder = (ViewHolder) convertView.getTag();
            }
    
            States state = stateList.get(position);
    
            holder.code.setText(" (" + state.getCode() + ")");
            holder.name.setText(state.getName());
            holder.name.setChecked(state.isSelected());
    
            holder.name.setTag(state);
    
            return convertView;
        }
    
    }
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Community CDub    7 年前

    您可以在自定义适配器中实现筛选器。试试看: Android Action Bar Search: How to filter a list by the property of a list item?

    希望它能帮助你!!