作為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 關注
- 473 瀏覽
添加回答
舉報
0/150
提交
取消