更新时间: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
!