作為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
提交
取消
