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

一个片断包含多个内部片断,用于多个选项卡

孟树
2023-03-14

我想要一个选项卡布局,其中,在每个选项卡上有两个片段,一个在上面显示任务的进度,通过在3个选项卡中提供从开始到结束的输入来完成,和另一个在进度片段下面的主片段将接受输入。

我试了两天所有的方法:(

我的解决方案我尝试了一个包含两个framelayout的布局,用于将主片段添加到ViewPager的两个选项卡中,如下所示:

public static class ScreenSlidePagerAdapter extends
        FragmentStatePagerAdapter {

    public static ArrayList<Fragment> tabs_fragments = new ArrayList<Fragment>(
            3);

    public ScreenSlidePagerAdapter(FragmentManager fm,
            ArrayList<Fragment> tabs) {
        super(fm);
        ScreenSlidePagerAdapter.tabs_fragments = tabs;

    }

    @Override
    public Fragment getItem(int arg0) {
        return tabs_fragments.get(arg0);
    }

    @Override
    public int getCount() {
        return tabs_fragments.size();
    }

    @Override
    public int getItemPosition(Object object) {
        if (tabs_fragments.contains(object)) {
            return POSITION_UNCHANGED;
        }
        return POSITION_NONE;
    }

    public static void setItem(Fragment fr, int position) {
        if (position <= 2 && position >= 0) {
            tabs_fragments.remove(position);
            tabs_fragments.add(position, fr);
        } else
            Log.d("adding tab", "wrong tab position to add fragment at");
    }
}

在活动开始时,我执行此操作,请参见在主片段中用于加载不同标签位置的详细片段的i get tab position:

    mPager = (ViewPager) findViewById(R.id.pager);
    // fragments for pagers
    ArrayList<Fragment> tabs = new ArrayList<Fragment>();
    tabs.add(new FrEventDetails());
    tabs.add(new FrEventDetails());
    tabs.add(new FrRuleSave());
    mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), tabs);
    mPager.setAdapter(mPagerAdapter);

    bar = getActionBar();
    bar.setTitle("Add Rule");
    bar.setSubtitle("select event for rule");
    bar.setDisplayShowTitleEnabled(true);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    bar.setDisplayHomeAsUpEnabled(true);

    bar.addTab(bar.newTab().setText("Select Event")
            .setTabListener(new TabListener(mPager)));
    bar.addTab(bar.newTab().setText("Select Action")
            .setTabListener(new TabListener(mPager)));
    bar.addTab(bar.newTab().setText("Save Rule")
            .setTabListener(new TabListener(mPager)));

    if (savedInstanceState != null) {
        bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
    }
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // When swiping between pages, select the
            // corresponding tab.
            if (bar.getSelectedNavigationIndex() != position)
                bar.setSelectedNavigationItem(position);
            tab = position;
        }

然后,当这个片段附加到活动时,我添加一个进度布局(title(对于一个框架布局,并基于选定的选项卡,添加另一个片段用于详细框架布局(用于输入))。如下所示:

public class FrEventDetails extends Fragment {
Context context;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = (Context) activity;
    int tab = AddRule1.tab;
    android.app.FragmentTransaction ft = activity.getFragmentManager()
            .beginTransaction();
     ft.add(R.id.fr_rule_progress_container, new FrProgress());

    if (tab == 1) {
        ft.replace(R.id.fr_event_input_container, new FrActionSelect(),
                "cell1_1").commit();
    } else if (tab == 0) {
        ft.replace(R.id.fr_event_action_container, new FrEventSelect(),
                "cell1_2").commit();
    }

}

结果:它在第一个选项卡上漂亮地显示标题和细节,但在第二个选项卡上,只有主片段,当我刷到第三个片段并返回时,第二个片段被漂亮地填充(在显示1秒钟后),但第一个片段现在是空的。我不明白该怎么处理这个。
请给出一些解决这两天令人泪目的问题的办法

共有1个答案

濮阳繁
2023-03-14
  1. 要在start中同时显示所有选项卡,请将PagerOffSetLimit(在本例中为3个选项卡,增加到2)
  2. 要刷新片段的状态或在当前选项卡旁边的选项卡中对片段调用某些方法,请使用Pager.InstantiateItem方法。
    1. 延迟一秒钟是因为您的XML中有animateLayoutChanges。

 类似资料:
  • 在我的应用程序中,我有5个片段。我使用底部导航来管理它们。但在第一个片段中,我有回收器视图,当我单击回收器项目时,我需要在此选项卡(第一个选项卡)中打开第二个片段。 现在,当我试图打开第二个片段时,他打开了所有标签上方。 这就是我如何打开第二个碎片

  • 问题 假如你有一个HTML片断 (比如. 一个div 包含一对p 标签; 一个不完整的HTML文档) 想对它进行解析。这个HTML片断可以是用户提交的一条评论或在一个CMS页面中编辑body部分。 办法 使用Jsoup.parseBodyFragment(String html)方法. String html = "<div><p>Lorem ipsum.</p>"; Document doc =

  • 我读过很多关于这方面的文章,但也有2012年或更早的文章。 (我只是打算从数据库中读取和插入一些数据。)

  • 我使用TabLayout与Viewpager和有3个标签。我正在使用FragmentPagerAdapter来设置选项卡和它的片段。 我只想加载第一个选项卡的片断时,它是默认选择,并希望加载其他选项卡的片断在一个新的活动。 我尝试在位置1和位置2的情况下从getItem方法返回null,但它给出了异常。 提前多谢。

  • 问题内容: 我是现代JS开发的新手,因此我需要有关此情况的帮助或建议。 情况: 我们有一个支持IE8(React 0.14)的React-Typescript-Redux项目。现在我们要升级到IE11和React 16,但应该支持IE8。 要求: 通过为每个构建使用不同的软件包和/或配置文件,减少浏览器版本之间的项目维护。 问题: 根据我到目前为止所做的研究,似乎无法通过选定的工具(npm,Web

  • 在我的应用程序中,我使用了一个活动和两个片段。该应用程序使用带有容器的布局,因此片段是通过事务添加的。第一个片段包含列表视图,另一个片段包含列表视图项的详细视图。两个片段都使用setRetainInstance(true)。片段是通过替换事务添加的,并设置了addToBackStack(null)。列表片段包含一个实例变量,其中包含列表的一些信息。现在我正在切换到详细并按回,实例变量为null。我