在片段事务处理后单击,EditText消失

时间:2019-10-23 19:33:31

标签: android kotlin android-edittext

我的EditText可以正常工作,直到您打开另一个片段并返回到第一个片段。单击EditText后,键盘会弹出,好像软键盘正在将片段的内容向上推并在背景图像后面。

这看起来像这样:

before

在打开一个片段并再次将其关闭之后:

after

我的搜索文本视图:

<EditText
                android:id="@+id/search_view"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_marginStart="30dp"
                android:layout_marginEnd="30dp"
                android:background="@drawable/textfield"
                android:digits="@string/digits"
                android:drawableStart="@drawable/ic_search"
                android:drawablePadding="10dp"
                android:fontFamily="@font/opensans_normal"
                android:hint="@string/search"
                android:inputType="text"
                android:paddingStart="10dp"
                android:paddingEnd="10dp"
                android:singleLine="true"
                android:textColor="@color/colorFont"
                android:textColorHint="@color/colorFont"
                android:textSize="15sp" />

调用此方法时,会发生错误:

  fun addFilter() {
    val topicList = mutableListOf<Topic?>()
    topicAdapter = TopicAdapter(topicList, context, null, true)

    if (CachedData.filter.isNotEmpty()) {

        if (CachedData.filter[0] != null) {
            filterList.visibility = View.VISIBLE
            topicList.add(Topic(CachedData.filter[0], selected = true, clickable = true))
        }

        if (CachedData.filter[1] != null) {
            filterList.visibility = View.VISIBLE
            if (CachedData.filter[0] == null) {
                topicAdapter.setSubselect(-1)
            }
            topicList.add(Topic(CachedData.filter[1], selected = true, clickable = true))
        }
    }
    filterList.adapter = topicAdapter
    filterList.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
}

更新

仅当第一个片段中的内容发生更改时,才会发生这种情况。例如,如果我在第一个片段中从RecylerView向数据集中添加数据,则会发生错误

4 个答案:

答案 0 :(得分:4)

问题是软键盘按下了背景。 解决方法如下: Software keyboard resizes background image on Android

答案 1 :(得分:4)

android:windowSoftInputMode="adjustPan|adjustResize"文件中设置manifest.xml进行核心响应活动。

答案 2 :(得分:2)

打开第二个片段时隐藏软键盘。使用此代码:

public void hideKeyboard(View view) {
        if (view != null) {
            view.clearFocus();
            InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

并在第一个片段的hideKeyboard()处调用onPause()方法,如下所示:

@Override
    public void onPause() {
        super.onPause();
        if (yourEdittext!= null)
            hideKeyboard(yourEdittext);
    }

然后windowSoftInputMode进入清单中这样的活动:

        <activity
            android:name=".YourActivity"
            android:windowSoftInputMode="adjustResize|stateAlwaysHidden|adjustPan">
        </activity>

答案 3 :(得分:2)

仅在您的活动中覆盖方法。它也会自动在其子片段中起作用...

VectorXd C = A.row(0).head(7);

还可以在“活动”,“片段”中使用以下实用程序功能来隐藏软键盘。

VectorXd C = A(0,seqN(0,7));

这将关闭键盘,而不管对话框片段和/或活动等中的代码是什么。

在活动/片段中的用法:

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
    if (currentFocus != null) {
        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
    }
    return super.dispatchTouchEvent(ev)
}