32

2 つのアクティビティがあります。最初の にはHomepageActiviy、別のアクティビティを使用してデータを検索する検索ウィジェットがありますSearchActivity

私がやりたいことは、 から に戻るSearchActiviyHomepageActivity、検索ウィジェットが折りたたまれ、空のテキストが表示されることです。

私はこの次のことをやろうとしました:

public class HomepageActivity extends Activity {
    @TargetApi(11)
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.projectslist, menu);

        if(Build.VERSION.SDK_INT >= 11) {
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            SearchView searchView = (SearchView) menu.findItem(R.id.homepage_search).getActionView();
            ComponentName component = new ComponentName(this, SearchActivity.class);
            searchView.setSearchableInfo(searchManager.getSearchableInfo(component));
            searchView.setIconifiedByDefault(true);
            searchView.setQuery("", false);

        }

        return super.onCreateOptionsMenu(menu);
    }

    […]

    @TargetApi(11)
    @Override
    protected void onRestart() {
        super.onRestart();
        if(Build.VERSION.SDK_INT >= 11)
            invalidateOptionsMenu();
        launchAsynchronousImageDownload();
    }
}

ウィジェットが折りたたまれて適切に表示されている場合、ウィジェット内のテキストは検索されたテキストを記憶しています (ウィジェットを再度開いた後)。ウィジェットのテキストをリセットするにはどうすればよいですか?

助けてくれてありがとう!;)

4

7 に答える 7

73

次のことも試してみてください。

searchView.setQuery("", false);
searchView.clearFocus();
于 2013-05-30T20:33:34.283 に答える
41

これは魔法です

searchView.setQuery("", false); // テキストをクリア

searchView.setIconified(true); // 検索エディターを閉じて、検索アイコンを再度作成します

HomepageActivityで、oncreate 関数の後に onSaveInstanceState 関数を挿入します。

この関数は、新しいアクティビティを開くたびにトリガーされ、新しいアクティビティを開く 前に検索ウィジェットの値をリセットします

  protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
         searchView.setQuery("", false);
        searchView.setIconified(true);
    }
于 2014-06-05T10:57:35.513 に答える
11

これは私のために働いた:

まず、アクティビティの先頭でメニュー項目変数を宣言しました。

private MenuItem mSearchMenuItem;

OnCreateOptionsMenu() で変数を定義しました。

mSearchMenuItem = menu.findItem(R.id.action_search);

onResume() で invalidateOptionsMenu() を宣言しました。

@Override
protected void onResume() {
    invalidateOptionsMenu();
    super.onResume();
}

最後に、onPrepareOptionsMenu() のメニュー項目で collapseActionView() を呼び出しました。

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    mSearchMenuItem.collapseActionView();

    return super.onPrepareOptionsMenu(menu);
}
于 2015-04-17T01:44:51.840 に答える
4
searchView.setQuery("", false);
searchView.setIconified(false);
于 2013-08-21T20:15:48.087 に答える
2

私もこの問題を抱えていましたが、onPrepareOptionsMenuに入れるとうまくいきました。

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
     SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
     searchView.setQuery("", false);
     // rest of code...
}
于 2014-04-15T18:57:22.120 に答える
0

それを機能させる醜い方法を見つけました(コメントを読んで違いを確認してください):

public class HomepageActivity extends Activity {
    // Declaring SearchView as an instance object
    private SearchView searchView;

    @TargetApi(11)
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.projectslist, menu);

        if(Build.VERSION.SDK_INT >= 11) {
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            // Using instance var instead of local var
            searchView = (SearchView) menu.findItem(R.id.homepage_search).getActionView();
            ComponentName component = new ComponentName(this, SearchActivity.class);
            searchView.setSearchableInfo(searchManager.getSearchableInfo(component));
            searchView.setIconifiedByDefault(true);
            // Setting query is not anymore required
            //searchView.setQuery("", false);
        }

        return super.onCreateOptionsMenu(menu);
    }

    […]

    @TargetApi(11)
    @Override
    protected void onRestart() {
        super.onRestart();
        // Do not need to recreate menu
        /*if(Build.VERSION.SDK_INT >= 11)
            invalidateOptionsMenu();*/
        if(Build.VERSION.SDK_INT >= 11) {
            // Calling twice: first empty text field, second iconify the view
            searchView.setIconified(true);
            searchView.setIconified(true);
        }
        launchAsynchronousImageDownload();
    }
}

それはかなり醜いと思うので、誰かがより良いアイデアを持っているなら、教えてください:)

于 2012-10-30T17:37:52.027 に答える