为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

跃然一笑 2019-07-01 15:35:36
作为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);
    }}


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 457 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信