0

在我的应用程序中,我有一个包含多个片段的操作栏活动。在我进行搜索的活动中,结果显示在一个新片段中。单击提交按钮后,我尝试隐藏键盘,但没有任何运气。这是我的代码

    public class SymptomNavigator extends ActionBarActivity implements
        MainBodyArea.Communicator, SearchResult.communicator, OnClickListener {
    SearchView searchView;
    FragmentManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.symptom_navigator);

        Button generateButton = (Button) findViewById(R.id.btn_Generate);
        generateButton.setOnClickListener(this);

        Button symptomListButton = (Button) findViewById(R.id.btn_ViewList);
        symptomListButton.setOnClickListener(this);

        if (findViewById(R.id.fragment_container) != null) {

            if (savedInstanceState != null) {
                return;
            }

            MainBodyArea firstFragment = new MainBodyArea();

            firstFragment.setArguments(getIntent().getExtras());

            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, firstFragment).commit();
        }
        manager = getSupportFragmentManager();
        mainFrag = (MainBodyArea) manager
                .findFragmentById(R.id.mainBodyFragment);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        searchView = (SearchView) MenuItemCompat
                .getActionView(searchItem);
        final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextChange(String newText) {

                return true;
            }

            @Override
            public boolean onQueryTextSubmit(String query) {
                query.trim();
                searchView.clearFocus();
                if (FormValidator.isValidEntry(query)) {
                    respondToSearch(query);

                }
                return true;
            }
        };
        searchView.setOnQueryTextListener(queryTextListener);
        return true;

    }



    @Override
    public void respondToSearch(String value) {
        SearchResult newFragment = new SearchResult();
        Bundle args = new Bundle();
        args.putString(SearchResult.ARG_POSITION, value);
        newFragment.setArguments(args);
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();

        transaction.replace(R.id.fragment_container, newFragment);
        transaction.addToBackStack("search");
        getSupportFragmentManager().popBackStack("search", FragmentManager.POP_BACK_STACK_INCLUSIVE);
        transaction.commit();

    }
}

正如您在上面的代码中看到的那样,我在 onqquery textlistener 内的搜索视图中调用了 clearFocus。它隐藏键盘并在新的片段事务完成后再次显示它。我如何使它工作?

注意:我也尝试过以下方法,但没有任何运气

try {
            InputMethodManager input = (InputMethodManager) getActivity()
                    .getSystemService(Activity.INPUT_METHOD_SERVICE);
            input.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
        }catch(Exception e) {
            e.printStackTrace();
        }
4

2 回答 2

2

经过数小时的搜索,我设法用一行代码修复了它。正如我所说,问题是生成结果后操作栏变得专注。

我所要做的就是把这个

searchView.setFocusable(false);

在调用结果片段之前。希望这对某人有帮助!

于 2014-05-21T14:52:48.477 回答
1

试试这个隐藏软键盘

getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

要隐藏始终使用以下内容,

getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

通过使用此键盘仅在选择文本字段或类似内容时显示

于 2014-05-21T13:24:34.557 回答