2

我的活动很少app,旨在执行某些特定任务。我想对几乎所有这些活动都有一个搜索功能。

我的设计如下:

Activity1:带有SearchView小部件Actionbar

Activity2:带有SearchView小部件Actionbar

SearchActivity:其中执行searchdisplay结果ListView

我已经在清单文件中为SearchActivity.

当我触摸搜索图标(放大镜)时,SearchView会展开以允许用户输入查询,然后用户触发搜索并将搜索意图传递给SearchActivity.

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

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

4

1 回答 1

0

我通常会做这样的事情(加上适配器实现了可过滤):

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);
    }
}
于 2013-10-17T12:19:41.243 回答