我目前使用具有“swipey的选项卡”和使用以下PagerAdapter的应用程序的工作:使用viewpager时如何与碎片进行通信?
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new HomeFragment();
case 1:
return new ListFragment();
case 2:
return new ChartFragment();
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
我使用下面的代码从主活动我的片段之一进行通信:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1)
{
if (resultCode == Activity.RESULT_OK)
{
String className = data.getExtras().getString("class_name");
if (className.trim().length() > 0) {
HomeFragment homeFrag = (HomeFragment) getSupportFragmentManager().findFragmentById(R.id.home_fragment);
if(homeFrag != null) {
Log.d("MainActivity", "homeFrag is not null");
homeFrag.newClass(className);
}else{
Log.d("MainActivity", "homeFrag is null");
HomeFragment newFragment = new HomeFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.home_fragment, newFragment);
transaction.commit();
newFragment.newClass(className);
}
addSubjectToDataBase(className);
}
}
}
}
我的问题是,当我尝试与主要活动的片段进行通信时,我似乎同时获得多个片段。当我改变屏幕的方向或重新开始活动时,我得到了片段的修改版本,但是当我来回滑动查看片段时,我得到旧的未修改版本的片段。片段管理器似乎没有注册由适配器创建的片段,因为尽管我知道这些片段已经创建,片段管理器总是返回一个空归零片段。
我应该如何避免这个问题,以及与主要活动中的片段进行通信的最佳方式是什么?
为什么使用'OnActivityResult()'? – Jibbo
我正在更新片段的信息来自另一个按下添加按钮时启动的活动的用户输入。 – Matthias