我有常见的片段生成函数,如下所示:
// Common Fragment generation method
public void generateFragment(String speechString, String buttonString) {
// Store data to be passed to the fragment in bundle format
Bundle args = new Bundle();
args.putString("Speech", speechString);
args.putString("ButtonTitle", buttonString);
// Instantiate Speech fragment and set arguments
SpeechFragment newFragment = new SpeechFragment();
newFragment.setArguments(args);
// Dynamically add fragment to view using fragment transaction
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.commit();
}
我让这个功能在我的一个活动中多次使用。现在,我发现这个功能可以用于我的另一个活动
我也有全局变量类,但它扩展了Application。是的我知道全局变量或全局函数应该在扩展Application类的类中声明
因此,我不能将包含getSupportFragmentManager()
的函数与活动相关联作为全局函数。
有没有人知道在活动之间使用这样的功能?
谢谢!
答案 0 :(得分:1)
您可以将片段管理器传递给方法:
public static void generateFragment(FragmentManager fragmentManager, String speechString, String buttonString)
我会像其他人建议的那样避免使用BaseActivity
,因为它限制了您可以延伸的范围:例如FragmentActivity
,ActionBarActivity
,ListActivity
,PreferenceActivity
,e.t.c。
谷歌“继承的构成”,看看为什么这是一个糟糕的方法。
真的,您可能想要做的是将此方法拆分。
在SpeechFragment.java中:
public static SpeechFragment newInstance(String speechString, String buttonString) {
// Store data to be passed to the fragment in bundle format
Bundle args = new Bundle();
args.putString("Speech", speechString);
args.putString("ButtonTitle", buttonString);
// Instantiate Speech fragment and set arguments
SpeechFragment newFragment = new SpeechFragment();
newFragment.setArguments(args);
return newFragment;
}
然后,SpeechFragment类将负责如何启动自己。 方法的其余部分
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, SpeechFragment.newInstance(speechString, buttonString);
transaction.commit();
然后可以只是使用此Fragment的类的一部分。然后,您可以灵活地更改容器ID,FragmentManager将使用它(可以使用片段的子FragmentManager),添加/附加等而不是替换 - 取决于该片段在活动中的使用方式。