2014-02-20 54 views
0

我正在根据官方guide实施ActionBar标签。没有显示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。

回答

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))); 

编辑帖子 - 工作的代码,我已经使用了一个演示

这里是我使用的是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); 

} 

} 
+0

我开发的Android 4.0及以上,所以'ActionBarActivity'不需要。建议的解决方案不会改变。我已经更新了我的问题。 –

+0

好的,那么如果是这样的话。删除getSupportActionBar()并使用getActionBar();你的问题看起来像你没有得到一个操作栏对象。上面编辑^如果您没有使用任何兼容性库,getSupportActionBar()调用将返回null。另外,你不需要为你的活动声明ActionBarActivity。 –

+0

请阅读问题。如果我没有得到的ActionBar标签不会启动,我会得到NPE的。 –