我应该在哪里为布局中的片段调用setarguments

时间:2014-01-29 12:54:27

标签: java android

我不明白为什么只有我面对这样一个微不足道的问题。我用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());


}

2 个答案:

答案 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,因为后端堆栈也很适合你。