我可以通过 Fragment 中的函数参数传递 AppCompatActivity。但我不知道如何检查哪个 fragment 在该函数内传递。如何进行instanceof检查。
假设,我有两个 fragment 。
- 选项 fragment
- 主页 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
}
}
最佳答案
你无法比较Activity
与 Fragment
(出于显而易见的原因),它们是完全不同的东西。一个Fragment
不绑定(bind)到任何特定的Activity
,它可以从任何Activity
触发.
当您经过 OptionsFragment.this.getActivity()
,您没有通过 Fragment
,您正在传递 Activity
那Fragment
目前处于。所以context
在你的checkSignal()
功能是 Activity
.
有几种方法可以实现这一点,这完全取决于您在应用程序中使用的实现。
例如,如果您有一个模式,其中 OptionsFragment
和HomeFragment
总是从单独的 Activity 中调用,那么例如如果 OptionsFragment
由 Activity1
触发和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/