Java 如何检查AppCompatActivity来自Android中的哪个片段

Java 如何检查AppCompatActivity来自Android中的哪个片段,java,android,Java,Android,我可以通过片段中的函数参数传递AppCompatActivity。但我不知道如何检查该函数中传递的片段。检查实例的可能性有多大 假设我有两个碎片 选项片段 家庭片段 两者都可以像这样传递活动 StaticAccess.checkSignal((AppCompatActivity) OptionsFragment.this.getActivity()) 或 在StaticAccess类中 public class StaticAccess{ public static void che

我可以通过片段中的函数参数传递AppCompatActivity。但我不知道如何检查该函数中传递的片段。检查实例的可能性有多大

假设我有两个碎片

选项片段 家庭片段 两者都可以像这样传递活动

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

在StaticAccess类中

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
    }

}
你不能将活动与片段进行比较,原因很明显,它们是完全不同的东西。片段不绑定到任何特定活动,它可以从任何活动触发。 当您传递OptionsFragment.this.getActivity时,您不是在传递片段,而是在传递片段当前所在的活动。因此,checkSignal函数中的上下文是活动的上下文。 有两种方法可以实现,这完全取决于您在应用程序中使用的实现。 例如,如果您有一种模式,其中OptionsFragment和HomeFragment总是从单独的活动中调用,那么例如,如果在checkSignal函数中OptionsFragment是从Activity1和HomeFragment从Activity2触发的,您将执行类似于如果Activity1的上下文实例{//do stuff}等操作,在我看来,这将是一种糟糕且不可扩展的方法。 现在,如果您的模式是只从片段调用checkSignal函数,那么您可以将构造函数更改为static void checkSignalfinal Fragment context,从类似StaticAccess.checkSignalthis的片段调用该函数,并在HomeFragment{//Do stuff}的上下文实例中检查类似以下的类型。然而,这也是一种糟糕且不可扩展的方法。 如果我是您,我将创建一个具有不同可能信号类型的枚举,并将其作为参数传递。这将消除您是否从活动、片段或任何您想要的地方调用它的依赖性,特别是因为它是静态的,所以可以从任何地方调用它。大概是这样的:

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)

你为什么想通过这个活动?获得相同结果的简单方法:为OptionFragment和HomeFragment创建一个BaseFragmentClass,并将它们传递给checkSignalBaseFragmentClass currentFragment,然后检查currentFragment是OptionFragment还是HomeFragments谢谢,现在我可以理解整个过程了
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)