如何从其页面升级ViewPager

时间:2014-12-10 08:10:53

标签: android android-fragments android-viewpager

我使用寻呼机enter link description here

的示例

我已经解决了所有问题,但有一个问题。我有4个不同的片段。其中一个包含ListView。当我单击ListView中的项目时,更改全局变量guestId。如果然后返回其他片段,则应更改它们。因为他们使用此变量作为参数。但他们没有改变。

public class Guest extends Fragment {
...
    private ViewPager pager;
    private MyPagerAdapter adapter;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.guest, null);

...

        if (InternetResiver.isOnline(getActivity())) {
            setData();
        } else {
            AlertDialog alert = InternetResiver.getAlertDialog(getActivity());
            alert.show();
        }
        return v;
    }

    public void startNewTread(String newId) {
        guestId = newId;
        Log.d("usernewid",newId);
        setData();
    }

    private class MyPagerAdapter extends FragmentPagerAdapter {
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int pos) {
            switch(pos) {
                case 0: return Folio.newInstance(guestId,hotel,room);
                case 1: return BalanceDetail.newInstance(guestId,hotel);
                case 2: return History.newInstance(guestId,hotel);
                case 3: return Record.newInstance(guestId,hotel,room);
                default: return Folio.newInstance(guestId,hotel,room);
            }
        }

        @Override
        public int getCount() {
            return 4;
        }       
    }

    public void setData() {
        String link = String.format(......., guestId, hotel);
        new MyAsincTask(getActivity()){........}.execute(link);
    }
}

我的片段

public class Folio extends Fragment {
    private ArrayList<FolioBean> folioBeans;
    private TableLayout tableFolio;
    private String guestId;
    private String hotel;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.folio, null);
         guestId = getArguments().getString("guestid");
         hotel = getArguments().getString("hotel");

        folioBeans = new ArrayList<>();
        tableFolio = (TableLayout) v.findViewById(R.id.tableFolio);
        if (InternetResiver.isOnline(getActivity())) {
            setData();
        } else {
            AlertDialog alert = InternetResiver.getAlertDialog(getActivity());
            alert.show();
        }
        return v;

    }

    public static Folio newInstance(String guestid,String hotel,String room) {

        Folio f = new Folio();
        Bundle b = new Bundle();
        b.putString("guestid", guestid);
        b.putString("hotel", hotel);
        b.putString("room", room);

        f.setArguments(b);

        return f;
    }

    public void setData() {
        String link = String.format(........., guestId, hotel);
        new MyAsincTask(getActivity()){........}.execute(link);
    }
}

使用相同的guestId

加载其他片段

1 个答案:

答案 0 :(得分:1)

这是因为ViewPager缓存了片段。您需要使用FragmentStatePagerAdapter而不是FragmentPagerAdapter,并在更改notifydatasetchanged()后调用guestId,并覆盖

在PagerAdapter中覆盖getItemPosition,如下所示:

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
} 

看到类似的问题

Refresh images on FragmentStatePagerAdapter on resuming activity