【发布时间】:2019-06-29 17:03:07
【问题描述】:
迁移到AndroidX后,当我尝试获取片段时,findFragmentById(findFragmentByTag也是)开始返回null。
像这样在 XML 中添加片段:
<fragment
android:id="@+id/id_fragment"
android:tag="tag_fragment"
android:name="com.blaa.MyFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
片段如下所示:
class MyFragment : androidx.fragment.app.Fragment() {
...
}
而 Activity 看起来像这样:
class MyActivity : AppCompatActivity(){
...
}
依赖:
...
implementation "androidx.appcompat:appcompat:1.0.2"
implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation "com.google.android.material:material:1.1.0-alpha03"
...
这是我在代码中的调用方式:
supportFragmentManager.findFragmentById(R.id.id_fragment)
或
supportFragmentManager.findFragmentByTag(R.id.tag_fragment)
两者都返回空值。我也尝试只使用 fragmentManager,结果为空 无论如何它都不会工作,因为它返回简单的片段,而不是 androidx 片段。
感谢您的建议
【问题讨论】:
-
你更新你的 gradle.properties 了吗?
-
完成@Ricardo 的评论,您是否已将
android.useAndroidX=true和android.enableJetifier=true添加到您的gradle.properties中? -
@Wang 你读过这个问题吗?喷射器还有其他用途。
-
@MartinZeitler 是的,当然,是什么让您怀疑我的评论?我认为这与问题无关。
-
@Wang 我认为两个 cmets 都错过了实际问题,因为
name属性显然引用了androidx.fragment.app.Fragment... 的实例,而androidx没有别的,而是重新打包的支持图书馆。命名空间是唯一的区别,而 jetifier 转换第三方库的命名空间。
标签: android android-fragments fragment androidx fragmentmanager