java - Android中如何检查AppCompatActivity来自哪个fragment

标签 java android

我可以通过 Fragment 中的函数参数传递 AppCompatActivity。但我不知道如何检查哪个 fragment 在该函数内传递。如何进行instanceof检查。

假设,我有两个 fragment 。

  1. 选项 fragment
  2. 主页 fragment

两者都可以像这样传递AppCompatActivity

StaticAccess.checkSignal((AppCompatActivity) OptionsFragment.this.getActivity())

或者

StaticAccess.checkSignal((AppCompatActivity) HomeFragment.this.getActivity())

静态访问类内部...

public class StaticAccess{

    public static void checkSignal(final AppCompatActivity context){
        //how to check context is instanceof which fragment when 
        //if(context instanceof OptionFragment) not comparable
    }

}

最佳答案

你无法比较ActivityFragment (出于显而易见的原因),它们是完全不同的东西。一个Fragment不绑定(bind)到任何特定的Activity ,它可以从任何Activity触发.

当您经过 OptionsFragment.this.getActivity() ,您没有通过 Fragment ,您正在传递 ActivityFragment目前处于。所以context在你的checkSignal()功能是 Activity .

有几种方法可以实现这一点,这完全取决于您在应用程序中使用的实现。

例如,如果您有一个模式,其中 OptionsFragmentHomeFragment总是从单独的 Activity 中调用,那么例如如果 OptionsFragmentActivity1 触发和HomeFragment来自Activity2在你的checkSignal函数你会做类似 if (context instanceof Activity1) { // Do stuff } 的事情等等。但是,在我看来,这将是一种糟糕且不可扩展的方法。

现在,如果你的说法是这样的 checkSignal函数仅从 Fragments 调用,那么你可以将构造函数更改为 static void checkSignal(final Fragment context) ,从 fragment 中调用函数,如 StaticAccess.checkSignal(this) ,并检查类似 if (context instanceof HomeFragment) { // Do stuff } 的类型。然而,这也是一种糟糕且不可扩展的方法。

如果我是你,我会创建一个 enum具有不同可能的信号类型,并将其作为参数传递。这将消除您是否从 Activity 调用它的依赖关系。 , Fragment ,或任何你想要的地方(特别是因为它是 static ,所以可以从任何地方调用它)。像这样的事情:

public enum SignalSource {
    HOME,
    OPTIONS
}

public class StaticAccess{

    public static void checkSignal(SignalSource source){
        if (source == SignalSource.HOME) {
            // Do something...
        } else if (source == SignalSource.OPTIONS) {
            // Do something...
        }
    }

}

// Call it like this from anywhere
StaticAccess.checkSignal(SignalSource.HOME)

关于java - Android中如何检查AppCompatActivity来自哪个fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60730675/

相关文章:

android - 将 EditText 调整为字体大小

java - 没有合适的驱动程序连接到使用 java 的 mysql 数据库 web 主机

java - 比较 MapReduce 性能

Java ExecutorService 何时调用 shutdown()

java - Android Google Play 服务错误 : didn't find class com. google.android.gms.maps.mapfragment 路径 dexpathlist

java - 安装 Android Studio,不指向有效的 JVM 安装错误

android - 区分屏幕超时和电源按钮按下?

android - 没有 Android 支持库的带指示器的 ViewPager

java - 报警管理器: repeating alarm not always fires

android - Guardianproject FFMpeg Android 库 Clip path 总是出错