Android:在SearchActivity的SearchView中显示搜索查询

时间:2013-10-17 07:00:41

标签: android searchview searchactivity

我的app中很少有活动可以执行某些特定任务。 我想对几乎所有这些活动都有搜索功能。

我的设计如下:

活动1 SearchView中有Actionbar小部件

活动2 SearchView中的Actionbar小部件

SearchActivity :在search中执行displayListView结果。

我已在SearchActivity的清单文件中进行了必要的配置。

当我触摸搜索图标(放大镜)时,SearchView会扩展为允许用户输入查询,然后用户触发搜索并将搜索意图传递给SearchActivity。< / p>

由于用户最初在Activity上输入了搜索查询,我在SearchView中看不到查询和SearchActivity(这基本上是允许用户执行进一步搜索所必需的) )。

我知道要这样做,我的SearchView也需要SearchActivity,但如何使用在之前的活动中输入的查询预先填充它并以展开状态显示?

1 个答案:

答案 0 :(得分:0)

我经常这样做(加上适配器实现Filterable):

public class ActivityFiltrable extends SherlockFragmentActivity implements OnQueryTextListener{

    protected String    _searchCurrentQuery;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity);
        // ABS
        ActionBar bar = getSupportActionBar();
        bar.setTitle(R.string.tle_search);
        bar.setDisplayHomeAsUpEnabled(true);

        //DO STUFF
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onDestroy() {
        closeKeyboard(this);
        super.onDestroy();
    }
    @Override
    public void onBackPressed() {
        finish();
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        menu.clear();
        getSupportMenuInflater().inflate(R.menu.action_bar_search, menu);
        // SEARCH MENUITEM
        MenuItem searchItem = menu.findItem(R.id.menu_search);
        SearchView searchView = (SearchView) searchItem.getActionView();
        searchView.setSubmitButtonEnabled(true);
        searchView.setOnQueryTextListener(this);
        return super.onPrepareOptionsMenu(menu);
    }

    public static void closeKeyboard(Context context) {
        try {
            InputMethodManager inputManager = (InputMethodManager) ((SherlockFragmentActivity) context).getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(((SherlockFragmentActivity) context).getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
        catch (Exception e) {
            // TODO:ERROR CLOSING KEYBOARD
        }
    }

    /**
     * SEARCH
     */
    @Override
    public boolean onQueryTextSubmit(String query) {
        searchAction(query);
        closeKeyboard(this);
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        searchAction(newText);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                if (item.getItemId() == android.R.id.home) {
                    finish();
                    // overridePendingTransition(R.animator.anim_left, R.animator.anim_right);
                    return true;
                }
                break;
    }

    protected void searchAction(String query) {
        _searchCurrentQuery = query.toString();
        EtablissementApplication._adapterFilterSearch.getFilter().filter(_searchCurrentQuery);
    }
}