我在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();
}
答案 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上。