作为ViewPager的一部分更新列表框架中的数据我正在使用Android中的v4兼容性查看器。我的FragmentActivity有一堆数据,这些数据将以不同的方式显示在我的ViewPager中的不同页面上。到目前为止,我只有3个相同ListFrage的实例,但在未来,我将有3个不同ListFragments的实例。视图寻呼机在垂直手机屏幕上,列表不是并排的.现在列表框架上的一个按钮启动一个单独的完整页面活动(通过FragmentActivity),返回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);
}现在,如您所见,我的第一次尝试是在整个FragmentPagerAdapter上通知DataSetChanged,这显示了有时更新数据,但其他我得到了一个IllegalStateException:无法在onSaveInstanceState之后执行此操作。我的第二次尝试是试图在ListFrage中调用一个UPDATE函数,但getItem中的getId返回了0。根据我试过的医生使用findFragmentById()或findFragmentByTag()从FragmentManager获取对片段的引用但我不知道我的碎片的标签或身份!对于ViewPager,我有一个Android:ID=“@+id/viewpager”,而ListFrage布局中的ListView有一个android:id=“@android:id/list”,但是我不认为它们有用。因此,我怎样才能这样做:(A)一次安全地更新整个ViewPager(理想情况下,将用户返回到他之前所在的页面)-用户看到视图更改是可以的。或者最好是,b)在每个受影响的ListFrage中调用一个函数来手动更新ListView。任何帮助都将被感激地接受!
3 回答
哔哔one
TA贡献1854条经验 获得超8个赞
public class MPagerAdapter extends FragmentPagerAdapter { private Map<Integer, String> mFragmentTags; private FragmentManager mFragmentManager; public MPagerAdapter(FragmentManager fm) { super(fm); mFragmentManager = fm; mFragmentTags = new HashMap<Integer, String>(); } @Override public int getCount() { return 10; } @Override public Fragment getItem(int position) { return Fragment.instantiate(mContext, AFragment.class.getName(), null); } @Override public Object instantiateItem(ViewGroup container, int position) { Object obj = super.instantiateItem(container, position); if (obj instanceof Fragment) { // record the fragment tag here. Fragment f = (Fragment) obj; String tag = f.getTag(); mFragmentTags.put(position, tag); } return obj; } public Fragment getFragment(int position) { String tag = mFragmentTags.get(position); if (tag == null) return null; return mFragmentManager.findFragmentByTag(tag); }}
- 3 回答
- 0 关注
- 457 浏览
添加回答
举报
0/150
提交
取消