如何在片段页面适配器中添加片段标记以稍后引用片段



我尝试了以下内容,但没有帮助。如何从片段页面适配器设置片段的标签或标签?

        @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
    }
}

最新更新