且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

里面ViewPager引用片段

更新时间:2023-10-27 22:49:52

我设法解决这个问题。诀窍是使内部活动的参考名单,不PagerAdapter。它是这样的:

I managed to solve it. The trick was to make a reference list inside Activity, not PagerAdapter. It goes like this:

List<WeakReference<EventListFragment>> fragList = new ArrayList<WeakReference<EventListFragment>>();

@Override
public void onAttachFragment (Fragment fragment) {
    Log.i(TAG, "onAttachFragment: "+fragment);
    if(fragment.getClass()==EventListFragment.class){
        fragList.add(new WeakReference<EventListFragment>((EventListFragment)fragment));
    }
}
public EventListFragment getFragmentByPosition(int position) {

    EventListFragment ret = null;
    for(WeakReference<EventListFragment> ref : fragList) {
        EventListFragment f = ref.get();
        if(f != null) {
            if(f.getPosition()==position){
                ret = f;
            }
        } else { //delete from list
            fragList.remove(f);
        }
    }
    return ret;

}

当然,你的片段具有实施为getPosition()的功能,但我需要这样的事情,无论如何,所以它不是一个问题。

Of course your fragment has to implement a getPosition() function, but I needed something like this anyway, so it wasn't a problem.

感谢亚历克斯·洛克伍德的建议与的WeakReference

Thanks Alex Lockwood for your suggestion with WeakReference!