【问题标题】:ActionBar Tabs are not displayed操作栏选项卡不显示
【发布时间】:2014-02-20 14:30:44
【问题描述】:

我正在根据官方guide 实现 ActionBar 选项卡。

我有一个添加到活动中的片段。在那个片段中,我正在创建标签:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(false);

    Tab tab = actionBar.newTab()
                       .setText("One")
                       .setTabListener(new TabListener<DemoFragment>(
                               this, "1", DemoFragment.class));
    actionBar.addTab(tab);

    tab = actionBar.newTab()
                   .setText("Two")
                   .setTabListener(new TabListener<DemoFragment>(
                           this, "2", DemoFragment.class));
    actionBar.addTab(tab);
}

但这些选项卡永远不会显示。也不是DemoFragment 的内容。即使在运行时 getActionBar().getTabCount() 返回正确的选项卡计数。我看到DemoFragment 已初始化。我看到的只是 ActionBar。

我做错了什么?

在为 minSdk=14 开发时,我没有使用任何支持库。

【问题讨论】:

    标签: android android-fragments android-tabs


    【解决方案1】:

    更新

    如果您不使用任何支持库,这应该可以工作 否则你将不得不使用 getSupportActionBar() 和上面提到的依赖项。

    试试这样的:

    // Get the Instance of the Action Bar, set Navigation Mode, remove title
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(false);
    
    // One tab
    actionBar.addTab(actionBar.newTab() .setText("One")
                       .setTabListener(new TabListener<DemoFragment>(
                               this, "1", DemoFragment.class)));
    // Two tab
    actionBar.addTab(actionBar.newTab()
                   .setText("Two")
                   .setTabListener(new TabListener<DemoFragment>(
                           this, "2", DemoFragment.class)));
    

    Edit to Post - 我用于演示的工作代码

    这是我使用 Android sdk 14 编写的演示应用程序的代码,就像你一样。

    public class MainActivity extends Activity {
    
     // String Titles
    static String [] titles = {"Fragment 1", "Fragment 2"};
    static String [] fragmentClasses = {Fragment1.class.getName(), Fragment2.class.getName()};
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        SimpleTabListener.SetUpTabNavigation(this, fragmentClasses, titles);
    }
    

    这里是 SimpleTabListener 类

    public class SimpleTabListener implements TabListener {
    
    
    Context m_context;
    String m_fragmentClassName ;
    Fragment m_fragment = null;
    
    
    public  SimpleTabListener(Context context, String tabFragmentClassName)
    {
        m_context = context;
        m_fragmentClassName = tabFragmentClassName;
    }
    
    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) 
    {
        // TODO Auto-generated method stub
    
    
    }
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
    {
        if(m_fragment == null)
        {
            m_fragment = Fragment.instantiate(m_context, m_fragmentClassName);
            ft.add(android.R.id.content, m_fragment);
        }else
        {
            ft.attach(m_fragment);
        }
    
    }
    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) 
    {
        // TODO Auto-generated method stub
        if(m_fragment != null){
            // TODO Auto-generated method stub
            ft.detach(m_fragment);
        }
    }
    
    
    public static void SetUpTabNavigation(Activity activity, String [] classNames, String [] tabTitles){
    
        ActionBar actionBar = activity.getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    
        ActionBar.TabListener listener;
    
        for(int i = 0; i <  tabTitles.length; i++)
        {
            listener = new SimpleTabListener(activity, classNames[i]);
            actionBar.addTab(actionBar.newTab().setText(tabTitles[i]).setTabListener(listener));
    
        }
    
    }
    
    }
    

    Frament1.class

    public class Fragment1 extends Fragment {
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        return inflater.inflate(R.layout.fragment_1, container, false);
    }
    
    }
    

    片段2.class

    public class Fragment2 extends Fragment {
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        return inflater.inflate(R.layout.fragment2, container, false);
    
    }
    
    }
    

    【讨论】:

    • 我正在为 Android 4.0 及更高版本进行开发,因此不需要 ActionBarActivity。建议的解决方案没有任何改变。我已经更新了我的问题。
    • 好的,如果是这样的话。删除 getSupportActionBar() 并使用 getActionBar();您的问题看起来像您没有返回操作栏对象。在上面编辑 ^ 如果您没有使用任何兼容性库,getSupportActionBar() 调用将返回 null。此外,您不需要为您的活动声明 ActionBarActivity。
    • 请阅读问题。如果我没有得到 ActionBar 选项卡,则不会启动,我会得到 NPE。
    • 你能把你的活动课贴出来吗?我需要看到的不仅仅是你设置的标签。
    • 那是我的错误。我的嵌套片段覆盖了 ActionBar 导航模式,并且标签从未显示。
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多