我不明白为什么只有我面对这样一个微不足道的问题。我用Google搜索,找不到多少。
我的情况很简单。我有一个片段布局。
<fragment
android:id="@+id/tabs_fragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/header"
android:layout_above="@+id/footer"
class="com.uae.mopw.fragments.TabsFragment" />
我需要向这些片段发送参数,但我不能指望如何计算。 如果我在代码中创建了一个片段,我就有机会在片段附加到活动之前调用setarguments。
但是现在我不认为我可以控制当这个片段附加到活动时会发生什么,因为它发生在活动本身的初始化期间。
我尝试随机覆盖onFragmentAttached并在那里设置参数,但是我仍然无法完成它
当我尝试上述操作时,我得到一个Fragment已经处于活动状态的异常。
帮助?
我的活动Oncreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String moduleName = null;
if (Utils.getLanguage(this).equals("ar")) {
setContentView(R.layout.activity_application_for_work_to_work_ar);
isArabic=true;
moduleName=ModuleNames.DISTANCE_MEASUREMENT_SERVICE_AR;
} else {
setContentView(R.layout.activity_application_for_work_to_work);
isArabic=false;
moduleName=ModuleNames.DISTANCE_MEASUREMENT_SERVICE;
}
/*init header*/
new Header(this,HeaderTypes.HEADER_INTERNAL,moduleName);
/*take out bundle from intent*/
Bundle args = this.getIntent().getBundleExtra(ModuleNames.DISTANCE_MEASUREMENT_SERVICE);
/*Obtain fragment reference*/
fragment=(TabsFragment)getFragmentManager().findFragmentById(R.id.tabs_fragment);
fragment.setArguments(new Bundle());
}
答案 0 :(得分:0)
在片段中创建静态方法以进行实例化:
public static FooFragment newInstance(final String someValue) {
final FooFragment fooFragment = new FooFragment();
final Bundle bundle = new Bundle();
bundle.putString("key", someValue);
fooFragment.setArguments(bundle);
return fooFragment;
}
使用FragmentTransaction添加或替换片段:
transaction.replace(R.id.fragment_foo, FooFragment.newInstance("myValue"));
您可以通过调用
来访问片段中的数据getArguments().getString("key");
答案 1 :(得分:0)
据我所知,你可以在片段创建后讨论setArguments。如果您以编程方式添加片段,Thomas的答案可以正常工作,但如果您使用的是xml布局则不然。在你的位置,我只是在你的Activity的onCreate中通过FragmentManager获取片段,然后在其上调用一个方法来设置你想要的值。这是一种不同的做事方式,这就是为什么我更喜欢以编程方式启动我的片段,而不是通过xml,因为后端堆栈也很适合你。