【发布时间】:2015-07-06 08:19:47
【问题描述】:
我有一个通过 ViewPagerAdapter 管理四个片段的活动。 从我的活动中,我想调用一个方法:
public void openButtons(){
//mPosition is a position of pager
if (mPosition==0){
Fragment1 fragment = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1);
fragment.openButtons();
}
if (mPosition==1){
Fragment2 fragment = (Fragment2) getSupportFragmentManager().findFragmentById(R.id.fragment2);
fragment.openButtons();
}
if (mPosition==2){
....
}
if (mPosition==3){
...
}
}
如果我的片段中的方法被定义为非静态:
public void openButtons(){//some stuff}
我得到一个用于 fragment.openButtons () 行的空指针,无论位置和片段是什么。
如果方法声明为静态,就可以了。
public static void openButtons(){//some stuff}
方法的内容没有问题,因为问题和空方法一样。
所以我的问题是为什么我们必须在片段中定义静态方法?
'在这些情况下的原因:
public void openButtons(){
//mPosition is a position of pager
if (mPosition==0){
Fragment1.openButtons()
}
if (mPosition==1){
Fragment2.openButtons()
}
if (mPosition==2){
....
}
if (mPosition==3){
...
}
}
功能相同!
谢谢。
【问题讨论】:
-
你为什么不做一个特定片段的静态对象引用?并且使用该 obj 您可以调用片段中的任何方法。无需定义静态方法。
-
请参阅this link 可能会对您有所帮助。
-
getSupportFragmentManager().findFragmentById(R.id.fragment1);返回 null 吗? -
从 FragmentManager 获取片段对象,然后调用非静态方法。
-
也许投射可以帮助你:((Fragment1) fragment).openButtons();这适用于我的情况
标签: java android android-fragments android-viewpager static-methods