亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

作為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 關注
  • 473 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號