我使用的是安卓系统中的v4兼容性ViewPager。我的FragmentActivity有一堆数据,它们将在我的ViewPager的不同页面上以不同的方式显示。到目前为止,我只有3个相同ListFragment的实例,但将来我会有3个不同ListFragments的实例。ViewPager在垂直的手机屏幕上,列表不是并排的。
现在,ListFragment上的一个按钮启动一个单独的整页活动(通过FragmentActivity),该活动返回数据,FragmentActivity修改数据,保存数据,然后尝试更新其ViewPager中的所有视图。它就在这里,我被困在这里。
public class ProgressMainActivity extends FragmentActivity
{
MyAdapter mAdapter;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState)
{
...
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.viewpager);
mPager.setAdapter(mAdapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
updateFragments();
...
}
public void updateFragments()
{
//Attempt 1:
//mAdapter.notifyDataSetChanged();
//mPager.setAdapter(mAdapter);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public String getTitle(int position){
return titles[position];
}
@Override
public int getCount(){
return titles.length;
}
@Override
public Fragment getItem(int position)
{
Fragment frag = HomeListFragment.newInstance(position);
//Attempt 2:
//fragId[position] = frag.getId();
return frag;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //To make notifyDataSetChanged() do something
}
}
public class HomeListFragment extends ListFragment
{
...
public static HomeListFragment newInstance(int num)
{
HomeListFragment f = new HomeListFragment();
...
return f;
}
...
现在您可以看到,我的第一次尝试是在整个FragmentPagerAdapter上执行notifyDataSetChanged,这显示有时会更新数据,但其他情况下,我得到了一个IllegalStateException: can this action on onSaveInstanceState。
我第二次尝试调用ListFragment中的更新函数,但getItem中的getId返回0。根据我尝试过的文档
使用findFragmentById()或findFragmentByTag()从FragmentManager获取对片段的引用
但我不知道我的片段的标签或id!我为ViewPager设置了一个android:id="@+id/viewpager“,在ListFragment布局中为我的ListView设置了一个android:id="@android:id/list”,但我不认为这些有用。
那么,我该如何: a)一次性安全地更新整个ViewPager (理想情况下,将用户返回到他之前所在的页面)-用户看到视图更改是可以的。或者优选地,b)调用每个受影响的ListFragment中的函数以手动更新ListView。
我们将非常感谢您的帮助!
https://stackoverflow.com/questions/7379165
复制相似问题