Вы можете определить PagerAdapter
как это, тогда вы сможете получить любой Fragment
в ViewPager
.
private class PagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment) {
mFragmentList.add(fragment);
}
}
Чтобы получить текущий Fragment
Fragment currentFragment = mPagerAdapter.getItem(mViewPager.getCurrentItem());
Что вам не хватает, так это то, что для ссылочных типов ByRef
влияет только на то, влияет ли назначение нового объекта на параметр исходной переменной, а не на то, влияет ли изменение объекта, на который ссылается параметр, на исходную переменную.
Думайте об этом так. Допустим, у вас есть команда, а Джо является капитаном этой команды. Вам нужно отправить кого-то в комнату, чтобы выполнить задачу. Вы говорите: «Давай возьмем капитана и отправим их», поэтому вы берете Джо и отправляете его в комнату. В комнате кто-то просит Джо снять синюю рубашку, которую он носит, и надеть красную, затем они решают, что Джо может сесть, и они фактически заставят Эндрю, который уже был в комнате, вместо этого выполнить задание. , Значит ли это, что Эндрю теперь капитан вашей команды? Конечно, нет. Тот факт, что они использовали другого человека для выполнения задачи внутри комнаты, не влияет ни на что за пределами комнаты, поэтому Джо по-прежнему является капитаном команды. Когда вы увидите, как Джо выходит из комнаты, он будет одет в красную рубашку, которую попросили его надеть. Изменения, внесенные в самого Джо в комнате, все еще влияют на Джо за пределами комнаты. Именно так ByVal
работает с параметрами ссылочного типа в .NET.
Чтобы этот сценарий реального мира работал, как при использовании ByRef
в .NET, вы должны признать, что если кто-то другой выполнит задание в комнате вместо Джо, он станет капитаном вашей команды. Такого рода вещи практически никогда не происходят в реальном мире, поэтому ByRef
является странностью в VB.NET, языке OO, а ByVal
- поведение по умолчанию.