简体   繁体   English

带有片段的操作栏上未显示第三个选项卡

[英]Third tab is not shown on actionbar with fragments

I want to create an app with three tabs. 我想创建一个带有三个标签的应用。 I have three fragments, three xml files, one main activity, one main xml and a tablistener class. 我有三个片段,三个xml文件,一个主要活动,一个主要xml和一个tablistener类。 The app shows the first two tabs properly, but the third tab is not shown. 该应用程序正确显示了前两个选项卡,但未显示第三个选项卡。 There is no error in the code. 代码没有错误。

Note: I'm using support library. 注意:我正在使用支持库。

MainActivity: 主要活动:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupTabs();
    }

    // To setup tabs using ActionBar and fragments

    private void setupTabs() {

        // setup the ActionBar

        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayShowTitleEnabled(true);

        //define which tabs you would like to display
        //and attach listeners for each tab:

        ActionBar.Tab tab1 = actionBar
                .newTab()
                .setText("First")
                .setTabListener(new SupportFragmentTabListener<FirstFragment>(R.id.main,this,
                        "first", FirstFragment.class));

        actionBar.addTab(tab1);
        actionBar.selectTab(tab1);

        ActionBar.Tab tab2 = actionBar
                .newTab()
                .setText("Second")
                .setTabListener(new SupportFragmentTabListener<SecondFragment>(R.id.main,this,
                        "second", SecondFragment.class));
        actionBar.addTab(tab2);

        ActionBar.Tab tab3 = actionBar
                .newTab()
                .setText("Third")
                .setTabListener(new SupportFragmentTabListener<ThirdFragment>(R.id.main, this,
                        "third", ThirdFragment.class));

        ActionBar.Tab tab4 = actionBar
                .newTab()
                .setText("Fourth")
                .setTabListener(new SupportFragmentTabListener<FourthFragment>(R.id.main, this,
                        "fourth", FourthFragment.class));
    }
}

TabListener: TabListener:

public class SupportFragmentTabListener<T extends Fragment>
        implements TabListener {

    private Fragment mFragment;
    private final FragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;
    private final int mfragmentContainerId;

    public SupportFragmentTabListener(FragmentActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mfragmentContainerId = android.R.id.content;
    }

    public SupportFragmentTabListener(int fragmentContainerId, FragmentActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mfragmentContainerId = fragmentContainerId;

    }


    /* The following are each of the ActionBar.TabListener callbacks */

    public void onTabSelected(Tab tab, FragmentTransaction sft) {
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            sft.replace(mfragmentContainerId, mFragment, mTag);
        } else {
            // If it exists, simply attach it in order to show it
            sft.replace(mfragmentContainerId, mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction sft) {
        if (mFragment != null) {
            // Detach the fragment, because another one is being attached
            //sft.remove(mFragment);

            sft.replace(mfragmentContainerId,mFragment);

        }else{
                // If not, instantiate and add it to the activity:
                mFragment = Fragment.instantiate(mActivity, mClass.getName());
                sft.add(android.R.id.content, mFragment,mTag);

            }
        }

    public void onTabReselected(Tab tab, FragmentTransaction sft) {
        // User selected the already selected tab. Usually do nothing.
    }
}

ThirdFragment: ThirdFragment:

public class ThirdFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.grade_table, container, false);

        TextView ff = (TextView) rootView.findViewById(R.id.textView2);

        return rootView;
    }
}

You need to add the tab after creating it. 创建标签后,需要添加标签。 You forgot to write: 您忘了写:

actionBar.addTab(tab3);

and

actionBar.addTab(tab4);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM