当前位置: 首页 > 知识库问答 >
问题:

当父项不是activty而是片段时为空选项卡

傅正豪
2023-03-14

我有一个运行的Android应用程序,有一个导航抽屉活动。对于每个菜单项,我都希望实现一个单独的片段,这样我就可以使用相同的工具栏和抽屉菜单。现在,其中一个片段应该包含一个带有3个选项卡的视图(3个片段中有RecycerViews)。我创建了一个选项卡式活动,并将代码迁移到一个新的片段中。当我第一次点击带有tab-fragment的menuitem时,它工作得非常好。但当我浏览菜单,然后再次打开标签片断时,它显示了3个标签,但其中什么也没有。现在,当我单击第三个选项卡时,数据就显示出来了。当我切换回第一个选项卡时,数据也回来了。只有中间选项卡保持为空。

我在一个全新的空项目上尝试了这种方法,只有一个导航抽屉活动和一个选项卡式活动,我还将代码迁移到一个片段中。我只使用了wich Android-Studio(3.4.2)生成的代码。在这些选项卡中只有textviews,但仍然存在相同的问题。

制表符片断(从生成的制表符中迁移的代码):

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        v = inflater.inflate(R.layout.activity_tab, container, false);

        context = getActivity().getApplicationContext();

        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(context, getActivity().getSupportFragmentManager());
        ViewPager viewPager = v.findViewById(R.id.view_pager);
        viewPager.setAdapter(sectionsPagerAdapter);
        TabLayout tabs = v.findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);

        return v;
    }

生成的SectionSpagerAdapter:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    @StringRes
    private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2};
    private final Context mContext;

    public SectionsPagerAdapter(Context context, FragmentManager fm) {
        super(fm);
        mContext = context;
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return PlaceholderFragment.newInstance(position + 1);
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return "Some Title";
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }
}

我只更改了“getCount”中的选项卡数量和“getPageTitle”中返回的字符串

我用NavigationItemSelectedListener处理导航抽屉活动(Main)中的菜单项单击,并像下面这样更改片段:

getSupportFragmentManager().beginTransaction().replace(R.id.content, new TabFragment()).commit();

“activity_tab”布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary" />
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

是否有可能在菜单项点击时保持片断,或者我必须使用选项卡式活动?

共有1个答案

陆飞捷
2023-03-14

首先,我认为您应该使用childFragmentManager而不是SupportFragmentManager。

SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(context, getChildFragmentManager());
 类似资料:
  • 我在主类中有这个类,用来在我的JTabbedPane上放置一个关闭按钮。问题是,例如,我打开了三个选项卡:journal、contact和upload,而contact选项卡是当前选择的选项卡。当我尝试关闭不是选定选项卡的日记选项卡时,关闭的是当前选定的选项卡。 这就是我调用选项卡的方法:

  • 从v4.fragment请求运行时权限并让回调转到fragment?

  • 我想将数据从父片段传递到选项卡式片段(子片段),以便传递初始数据(当父片段第一次加载时),我使用了Bundle数据。当在子片段的嵌套片段中时,我调用PopbackStack(),以便通过单击按钮返回。在那里,我需要更新之前传递到子选项卡片段的捆绑数据。捆绑数据不会得到更新的数据集 父片段-初始状态 子片段-Tab片段 孩子- 我错过了什么?请帮忙

  • 我喜欢现在Java标准库中的选项。但有一个基本问题我一直碰到,但我还没想好如何用最好的(最容易读懂、最漂亮、最短的)方法解决: 当选项为空时如何从方法返回? 如果可选项为空,我如何从方法返回,而不必在方法的其余部分中使用,也不必声明额外的变量和额外的块嵌套级别? 或者如果不可能得到所有这些,那么处理这种情况的最佳方法是什么?

  • 问题内容: 我写的http标签里面: 我有以下sas bean 在代码中,我从注册表中获取信息: 现在正在工作。 但是不赞成上课的问题 我这样替换了sas bean 但现在 总是返回空列表。 如何解决? PS完整配置: web.xml: 安全上下文: applicationContext.xml: dataContext.xml restTemplateContext.xml securityCo

  • 我想使用带有选项卡的ViewPager。然而,我需要在寻呼机上方放置一个文本视图(以及选项卡),如下所示: 看起来对于选项卡小部件,我们可以使用PagerTitleStrip或PagerTabStrip内联一个选项卡小部件: 但是,PagerTitleStrip和PagerTabStrip小部件的风格与只使用ActionBar选项卡时不同。我希望选项卡看起来像它们,具有均匀间隔的选项卡大小。 是否