【问题标题】:How can I set fragment Id in some of the override method of FragmentPagerAdapter?如何在 FragmentPagerAdapter 的一些 override 方法中设置 Fragment Id?
【发布时间】:2015-09-22 15:29:22
【问题描述】:

我有一个FragmentPagerAdapter,在片段类中我有一个需要从主要活动中使用的公共方法。 在这一点上,我不知道如何访问包含该方法的片段。我可以在下面的类上修改一些东西来设置 id 或一些东西到片段吗?

public class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new Fragment_1();
            case 1:
                return new Fragment_2();
            case 2:
                return new Fragment_3();
            }
        return null;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
            switch (position) {
            case 0:
                return getString(R.string.fg_1).toUpperCase(l);
            case 1:
                return getString(R.string.fg_2).toUpperCase(l);
            case 2:
                return getString(R.string.fg_3).toUpperCase(l);
            }
        }
        return null;
    }
}

如何设置 Fragment id、Fragment 标签或其他东西以便以后访问 Fragment?

访问片段方法的任何其他方式都可以。

编辑了更多信息:

我真的很迷茫。但是,我也有一个 ViewPager,这些片段与 actionBar 选项卡相关联。

mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        actionBar.setSelectedNavigationItem(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
}

有什么方法可以和碎片通信吗?

【问题讨论】:

标签: android android-fragments fragmentpageradapter


【解决方案1】:

像这样:

        switch (position) {
        case 0:
            Fragment f = new Fragment_1();
            f.setId(...);
            return f;
        case 1:
            ...
        }

这假设您的片段中有一个 setId 方法。

我所做的是为每个片段定义一个静态字符串 TAG,然后我可以使用 Fragment_1.TAG 访问它。

【讨论】:

  • Fragment 上没有 setId() 方法。
  • 问题是:“我可以在下面的类上修改一些东西来设置 id 或一些东西到片段吗?” ... 答案是肯定的,他只需要创建方法。不知道他想用这个身份做什么。
  • “不确定他想用这个身份做什么”——大概是打电话给findFragmentById()。 “我所做的是为每个片段定义一个静态字符串 TAG,然后我可以使用 Fragment_1.TAG 访问它”——由于FragmentPagerAdapter 子类没有执行FragmentTransaction,因此没有机会为片段。
猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多