【问题标题】:Previous fragment edittext focus issue上一个片段edittext焦点问题
【发布时间】:2021-03-27 19:02:00
【问题描述】:

我正在使用多个片段。 我在片段上添加片段,如下所示

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

现在的问题是,尽管添加了新片段,但之前的片段并没有失去焦点。 在前一个片段编辑文本中输入当前片段类型的编辑文本。

即使下一个动作也会在当前片段中失去焦点并在前一个片段中移动光标。

请帮忙。

【问题讨论】:

  • 在 newFragment 的根布局中添加 android:focusable=trueandroid:clicable=true

标签: android android-fragments fragment-backstack


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果你想在一个容器中添加一个片段是不可能的,但如果你想用另一个片段替换片段是可以做到的,因为一个布局是为 1 个片段,不超过一个,所以你只需要用另一个片段替换前一个片段

    如果你想用新片段替换之前的片段,我有一个简单的代码

    首先,你需要添加一个带有片段参数的方法

    fun openFragment(fragment: Fragment?) {
        val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
        transaction.replace(R.id.container_content, fragment!!)
        transaction.commit()
    }
    

    如果你想用另一个片段替换片段,只需调用这样的方法openFragment(FragmentClass.newinstance()) soo 之前的片段将被新片段替换

    希望这段代码可以帮助你解决问题

    【讨论】:

      猜你喜欢
      • 2020-11-10
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多