之前的片段编辑框焦点问题

3

我正在使用多个片段。 我按以下方式添加片段:

supportfragmentmanager
            .beginTransaction()
            .add(R.id.container_login, newFragment, newFragment.javaClass.simpleName)
            .addToBackStack(newFragment.javaClass.simpleName)
            .commitAllowingStateLoss()

问题是,尽管添加了新的片段,但先前的片段仍然没有失去焦点。当前片段中的EditText输入会出现在前一个片段的EditText中。

即使是下一步操作也会失去当前片段的焦点,并将光标移动到前一个片段中。

请帮忙解决。


1
在你的新Fragment的根布局中添加android:focusable=trueandroid:clicable=true - ADM
2个回答

1
该片段不会失去焦点,因为您使用的是.add方法,该方法将新片段添加到已存在于容器中的片段上方。 请使用.replace()方法替换容器中的现有片段。这类似于调用remove(Fragment),然后使用.add()方法。

1
如果您想在一个容器中添加一个Fragment是不可能的,但是如果您想用另一个Fragment替换当前Fragment是可以做到的,因为一个布局只能用于1个Fragment,而不是多个。所以您只需要用另一个Fragment替换之前的Fragment即可。
如果您想用新的Fragment替换之前的Fragment,我有一个简单的代码。
首先,您需要添加一个带有Fragment参数的方法。
fun openFragment(fragment: Fragment?) {
    val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
    transaction.replace(R.id.container_content, fragment!!)
    transaction.commit()
}

如果您想用另一个片段替换该片段,只需像这样调用方法:openFragment(FragmentClass.newinstance()),那么先前的片段将被新片段替换。
我希望这段代码能帮助您解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接