如何在安卓系统中获取当前片段--包括代码示例

155 阅读2分钟

获得当前在你的AndroidActivity 类中活动的片段,你需要使用supportFragmentManager 对象。

supportFragmentManagerfindFragmentById()findFragmentByTag() 方法,你可以用它来获得一个片段实例。

例如,假设你在你的活动中创建了一个名为FirstFragmentFragment 类,如下图所示。

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> 中放置了一个名为FirstFragmentFragment 类,如下图所示。

<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应用程序。 😉