要获得当前在你的AndroidActivity 类中活动的片段,你需要使用supportFragmentManager 对象。
supportFragmentManager 有findFragmentById() 和findFragmentByTag() 方法,你可以用它来获得一个片段实例。
例如,假设你在你的活动中创建了一个名为FirstFragment 的Fragment 类,如下图所示。
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.frameLayout, FirstFragment())
fragmentTransaction.commit()
在上面的例子中,FirstFragment 是在一个<FrameLayout> 中膨胀的,该id 的值为frameLayout 。
你可以像这样使用supportFragmentManager ,在frameLayout 里面获得充气的Fragment 实例。
supportFragmentManager.findFragmentById(R.id.frameLayout)
在下面的例子中,一个点击监听器被设置在活动按钮myBtn 。
当按钮被点击时,Android将尝试通过id 的值找到一个片段。
然后,通过使用Kotlin的is 操作符来检查实例类型。
myBtn.setOnClickListener {
val fragmentInstance = supportFragmentManager.findFragmentById(R.id.frameLayout)
if(fragmentInstance is FirstFragment){
Toast.makeText(this, "FirstFragment found", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Not found", Toast.LENGTH_SHORT).show()
}
}
当fragmentInstance 是一个FirstFragment 类的实例时,if 语句将评估为true 。
另外,你也可以通过你在fragmentTransaction 实例的replace() 方法中设置的标签获得一个片段。
// Set a tag after the fragment class:
fragmentTransaction.replace(R.id.frameLayout, FirstFragment(), "FF1")
上面定义的标签FF1 允许你使用FragmentManager.findFragmentByTag() 方法来检索片段。
val fragmentInstance = supportFragmentManager.findFragmentByTag("FF1")
一旦你通过标签获得了当前片段,你可以再次使用is 操作符来检查该片段的实例类型。
使用Java获取当前片段
当你用Java开发Android应用程序时,你可以使用FragmentManager 类来获得当前片段的实例。
你需要通过你用作片段容器的<FragmentContainerView> 或<FrameLayout> 标签的id 找到片段。
例如,假设你在你的<FragmentContainerView> 中放置了一个名为FirstFragment 的Fragment 类,如下图所示。
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="org.metapx.FirstFragment" />
你可以在你的Activity 类代码中用Java程序化地获得FirstFragment 实例。
首先,通过调用getSupportFragmentManager() 方法获得FragmentManager 实例。
FragmentManager fm = getSupportFragmentManager();
使用fm 实例,调用findFragmentById() 方法,并传递视图id 值作为其参数。
在这个例子中,id 的值是fragment_container_view 。
Fragment fragInstance = fm.findFragmentById(R.id.fragment_container_view);
你需要做的最后一件事是检查fragInstance 是否是FirstFragment 的一个实例,如下图所示。
if (fragInstance instanceof FirstFragment){
Toast.makeText(
MainActivity.this,
"FirstFragment found",
Toast.LENGTH_SHORT
).show();
}
通过使用instanceof 操作符,你可以检查你检索的fragInstance 是否是一个特定类的实例。
这就是你如何在Android应用程序中获得当前片段,无论是在Kotlin还是在Java中。
请自由复制和调整本教程中的代码,用于你的Android应用程序。 😉