片段事务问题并将值传递给片段?

时间:2018-06-12 19:10:11

标签: android android-fragments

我在FragmentTransaction方面遇到了一些麻烦,并将值从activityA传递给了fragmentA。我认为我遇到的问题是我制作了2个new FragmentA()个实例,由于创建了2个片段而导致bundle.arguments()中断,我在片段中使用if(bundle != null)来检查该包是否为空。在这个问题已经有一段时间了。

提前感谢您的帮助。

这是我到目前为止所拥有的

在这个方法中,我使用3个片段设置我的viewpager(因为即时通讯使用tabbedlayout)

 private void setupViewPager() {
    PagerAdapter fragmentAdapter = new PagerAdapter(getSupportFragmentManager());
    fragmentAdapter.addFragment(getString(R.string.fragment_a), new TodoFragment());
    fragmentAdapter.addFragment(getString(R.string.fragment_b), new DoingFragment());
    fragmentAdapter.addFragment(getString(R.string.fragment_c), new KoncanoFragment());
    ViewPager mViewPager = findViewById(R.id.container);
    mViewPager.setAdapter(fragmentAdapter);
    TabLayout mTabLayout = findViewById(R.id.tabs);
    mTabLayout.setupWithViewPager(mViewPager);
    mViewPager.setOffscreenPageLimit(fragmentAdapter.getCount() - 1);
    mViewPager.setCurrentItem(0);
}

此方法用于将包发送到我的FragmentA

private void sendToFragToDo(Fragment f, Bundle value) {
    final android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    f.setArguments(value);
    fragmentTransaction.replace(R.id.container, f, "a");
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

}

2 个答案:

答案 0 :(得分:0)

使用不同的方法将数据从活动传递到bundle。在片段内部创建一个newInstance方法(你想作为参数传递的对象),如果你在Fragment类中键入AndroidStudio newInstance,它会自动为你建议实现,如果没有,它会是这样的:

public static TodoFragment newInstance(data to pass){
 Bundle args = new Bundle();
 //then you put into args the data you wann pass with args specific key,value method
 fragment.setArguments(args);
 return fragment;
}

在活动而不是新的TodoFragment()中,使用TodoFragment.newInstance(要传递的数据); 要检索传递的数据,请在Fragment' onCreate()中使用getArguments()

答案 1 :(得分:0)

也许是因为代码在片段的onCreate中,我认为它应该在onCreateView中。尝试onCreate只检索传递的数据,然后在onCreateView中编写该代码,如果基于传递的数据不在bundle上。