我尝试了以下内容,但没有帮助。如何从片段页面适配器设置片段的标签或标签?
@Override
public Fragment getItem(int position) {
MainActivity activity = (MainActivity)mcontext;
if (position == 0) {
Fragment discoverFragment = new DiscoverFragment();
activity.getSupportFragmentManager().beginTransaction().add(discoverFragment, "discover").commit();
return discoverFragment;
} else if (position == 1){
Fragment myFeedFragment = new MyFeedFragment();
activity.getSupportFragmentManager().beginTransaction().add(myFeedFragment, "myfeed").commit();
return myFeedFragment;
} else {
Fragment filterFragment = new FilterFragment();
activity.getSupportFragmentManager().beginTransaction().add(filterFragment, "filter").commit();
return filterFragment;
}
}
您似乎正确设置了标签。无论如何,这种方式应该有效。
设置标签:
MyFeedFragment myFeedFragment= new MyFeedFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer, myFeedFragment, "myfeed");
fragmentTransaction.commit();
然后您可以通过搜索标签来获取它:
List fragments = getSupportFragmentManager().getFragments();
Fragment discoverFrag = null;
Fragment myFeedFragment = null;
Fragment filterFragment = null;
for (int i = 0; i < fragments.size(); i++) {
if (((Fragment) fragments.get(i)).getTag() == "discover")
discoverFrag = (Fragment) fragments.get(i);
if (((Fragment) fragments.get(i)).getTag() == "myfeed")
myFeedFragment = (Fragment) fragments.get(i);
if (((Fragment) fragments.get(i)).getTag() == "filter")
filterFragment = (Fragment) fragments.get(i);
}
使用这个类作为你的适配器
class SwipeAdapter extends FragmentPagerAdapter {
private Map<Integer, String> mFragmentTags;
private FragmentManager mFragmentManager;
private String mPagetile[];
public SwipeAdapter(FragmentManager fm, Context context) {
super(fm);
mPagetile = context.getResources().getStringArray(R.array.pageTitle);
mFragmentManager = fm;
mFragmentTags = new HashMap<>();
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new "Your_fragment";
default:
break;
}
return null;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Object obj = super.instantiateItem(container, position);
if (obj instanceof Fragment) {
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);
}
@Override
public CharSequence getPageTitle(int position) {
return mPagetile[position];
}
@Override
public int getCount() {
return "Number of fragments";
}
}
现在使用SwipeAdapter的实例调用getFrament(int "position of fragment"(;希望你明白了。
要检索 FragmentPagerAdapter 中使用的片段,您可以在任何地方执行此操作 (Kotlin(:
for (fragment in supportFragmentManager.fragments) {
if (fragment is YourFragment) {
val yourFragment = fragment as YourFragment
}
}