3

我有一个选项卡主机,每个选项卡都有一个活动组。

当应用程序启动并且我按下editText时,键盘就会出来。当我开始一个子活动然后回到主要活动时,键盘不再出现。

我的启动子活动的代码

Intent i = new Intent(this, ShowAddFoodToSelection.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

View view = ActivityGroupMeal.group.getLocalActivityManager().startActivity(DataParser.activityIDMeal, i).getDecorView();

ActivityGroupMeal.group.setContentView(view);

我的代码回到主要活动

ActivityGroupMeal.group.back();

以及活动组中的后台代码:

public void back() {
        try {
            // if we set history.size() > 0 and we press back key on home
            // activity
            // and then on another activity we wont get back!
            if (history.size() > 1) {
                history.remove(history.size() - 1);
                // call the super.setContent view! so set the real view
                super.setContentView(history.get(history.size() - 1));
            } else {

            }
        } catch (Exception e) {
            if (history.size() >= 0)
                super.setContentView(history.get(0));
        }
    }

我使用以下代码设置onClickListener了一个:editText

private void keyboardShow() {
        InputMethodManager inputManager = (InputMethodManager) ActivityGroupMeal.group.getSystemService(Context.INPUT_METHOD_SERVICE);

        boolean test = inputManager.showSoftInput(editTextSearch, InputMethodManager.SHOW_IMPLICIT);

        Toast.makeText(this, "show keyboard " + test, Toast.LENGTH_SHORT).show();
    }

它第一次返回 true,而我从 childactivity 回来的时候返回 false。

当我单击另一个选项卡然后返回第一个选项卡时,然后单击 editText 它再次返回 true。

编辑:我得到了一个临时修复,我onClicklistener在editTextbox上设置了一个,然后我用代码显示键盘

InputMethodManager inputManager = (InputMethodManager) ActivityGroupMeal.group
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        // show keyboard , when it fails first switch tab and then try again
        if (!inputManager.showSoftInput(null, InputMethodManager.SHOW_FORCED)) {
            // switch from tab and back
            // the keyboard wont show if we dont do this
            ShowHomeTab parentActivity;
            parentActivity = (ShowHomeTab) this.getParent().getParent();
            parentActivity.goToTab(DataParser.activityIDTracking);
            parentActivity.goToTab(DataParser.activityIDShowFoodList);

            inputManager.showSoftInput(null, InputMethodManager.SHOW_FORCED);
        }

当我从 childactivity 回来时,我首先必须用代码切换选项卡,然后键盘才会显示 =/

有人对此有解释吗?

4

2 回答 2

4

在我使用活动组的应用程序中,我使用下面的代码来解决相同的问题

YOUR_EDIT_TEXT.setOnEditorActionListener(new OnEditorActionListener() {

            public boolean onEditorAction(TextView v, int actionId,
                    KeyEvent event) {
                if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    in.hideSoftInputFromWindow(searchName
                            .getApplicationWindowToken(),
                            InputMethodManager.HIDE_NOT_ALWAYS);
                }
                return false;
            }
        });

它工作正常。所以试试这个代码片段。

于 2012-06-15T12:08:55.010 回答
1

您可以尝试将requestFocus />元素添加到 的定义中EditText,即

<EditText android:id="@+id/edit_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text" >
        <requestFocus />
</EditText>

如果没有帮助,请back()通过调用在您的方法中请求焦点requestFocus()

于 2012-06-12T08:21:34.997 回答