作为ViewPager的一部分更新列表框架中的数据

作为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。

任何帮助都将被感激地接受!


跃然一笑
浏览 458回答 3
3回答

哔哔one

每次实例化触发器时尝试记录标记。public&nbsp;class&nbsp;MPagerAdapter&nbsp;extends&nbsp;FragmentPagerAdapter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Map<Integer,&nbsp;String>&nbsp;mFragmentTags; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;FragmentManager&nbsp;mFragmentManager; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;MPagerAdapter(FragmentManager&nbsp;fm)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(fm); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mFragmentManager&nbsp;=&nbsp;fm; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mFragmentTags&nbsp;=&nbsp;new&nbsp;HashMap<Integer,&nbsp;String>(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getCount()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;10; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Fragment&nbsp;getItem(int&nbsp;position)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Fragment.instantiate(mContext,&nbsp;AFragment.class.getName(),&nbsp;null); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Object&nbsp;instantiateItem(ViewGroup&nbsp;container,&nbsp;int&nbsp;position)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj&nbsp;=&nbsp;super.instantiateItem(container,&nbsp;position); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(obj&nbsp;instanceof&nbsp;Fragment)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;record&nbsp;the&nbsp;fragment&nbsp;tag&nbsp;here. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fragment&nbsp;f&nbsp;=&nbsp;(Fragment)&nbsp;obj; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tag&nbsp;=&nbsp;f.getTag(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mFragmentTags.put(position,&nbsp;tag); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;obj; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Fragment&nbsp;getFragment(int&nbsp;position)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tag&nbsp;=&nbsp;mFragmentTags.get(position); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tag&nbsp;==&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mFragmentManager.findFragmentByTag(tag); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android