Domanda

I have a collapsible search box. I want to capture the text change event and perform a search on a list. But I am not able to capture the onTextChanged event.

Menu Resource:

<item android:id="@+id/action_search"
      android:icon="@drawable/abs__ic_search"
      android:title="Search"
      android:showAsAction="always"
      android:iconifiedByDefault="false"
      android:actionViewClass="com.actionbarsherlock.widget.SearchView"/>

Activity:

import com.actionbarsherlock.view.MenuItem;
    public class FromPageActivity extends SherlockListActivity {
        EditText search;
    //more code here
    .
    .
    .
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        switch (item.getItemId()) {
            case R.id.action_search:
                search(item);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    public void search(MenuItem item){
            search = (EditText) item.getActionView();
            search.addTextChangedListener(filterTextWatcher);
            search.requestFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        }
        private TextWatcher filterTextWatcher = new TextWatcher(){
            public void afterTextChanged(Editable s)
            {
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
            }

            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                Toast.makeText(FromPageActivity.this, "changed", Toast.LENGTH_LONG).show();
            }
        };
    }

What am I missing out?

È stato utile?

Soluzione

Try to use com.actionbarsherlock.view.MenuItem instead of MenuItem as parameter in search and onOptionMenuItemSelected methods

Also you can try to use SearchView.OnQueryTextListener to detect text changing, for example:

public boolean onCreateOptionsMenu(Menu menu) 
{
        getSupportMenuInflater().inflate(R.menu.menu, menu);

        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        if (null != searchView )
        {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
            searchView.setIconifiedByDefault(false);   
        }

        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() 
        {
            public boolean onQueryTextChange(String newText) 
            {
                // this is your adapter that will be filtered
                adapter.getFilter().filter(newText);
                return true;
            }

            public boolean onQueryTextSubmit(String query) 
            {
                // this is your adapter that will be filtered
                adapter.getFilter().filter(query);
                return true;
            }
        };
        searchView.setOnQueryTextListener(queryTextListener);

        return super.onCreateOptionsMenu(menu);
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top