0

Hello!Android gui with actionbar,fragments和viewpager

我一直在编程很长一段时间,但刚刚起步反正开发Android,这似乎是从C++完全不同的说,至少...

,我试图实现与GUI一些标签,应该能够改变左/右滑动标签。这些选项卡是通过ActionBar(或者ActionBarSherlock)来实现的,从支持库中用ViewPager滑动。单个标签是片段(即是SherlockFragment:s)。在底部应该有一个状态栏,只是显示一些文本。

我遇到的问题是选项卡从不显示。我在顶部看到带有标志/标题的操作栏,下面有一个标签列表。在屏幕的底部,我看到状态栏文本,但没有其他。

如果我取消注释SwipeBar()构造函数中的行//context.setContentView(pager);,将显示选项卡的内容,但状态栏不显示。 (这条线感觉真的错了,无论如何,但我无法弄清楚如何在没有它的情况下在我的标签中获得一些内容。)

我试过了我能想到的一切。我已经阅读了我所能找到的所有内容,并尝试了各种不同的例子来说明如何自己完成每个功能。但是将它们结合起来......我无法让这个工作。我真的很感谢你的帮助!


我主(活动)类:
Main.java

public class Main extends SherlockFragmentActivity { 
private SwipeBar tabs; 

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tabs = new SwipeBar(this, R.id.pager); 
    tabs.add(One.class, "one", null); 
    tabs.add(Two.class, "two", null); 
    tabs.add(Three.class, "three", null); 
} 
} 

这是我的类,它实现动作条/ viewpager /片段:
SwipeBar.java

public class SwipeBar extends FragmentPagerAdapter implements OnPageChangeListener, 
    TabListener { 
private final ActionBar     bar; 
private final SherlockFragmentActivity ctx; 
private final ViewPager     pager; 
private final ArrayList<TabInfo>  tabs; 

public SwipeBar(final SherlockFragmentActivity context, final int viewPagerId) { 
    super(context.getSupportFragmentManager()); 
    bar = context.getSupportActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    pager = new ViewPager(context); 
    pager.setId(viewPagerId); 
    pager.setAdapter(this); 
    pager.setOnPageChangeListener(this); 
    ctx = context; 
    // context.setContentView(pager); 
    tabs = new ArrayList<TabInfo>(); 
} 

public void add(final Class<?> clss, final int tabHeaderStringId, final Bundle args) { 
    final ActionBar.Tab tab = bar.newTab(); 
    final TabInfo info = new TabInfo(clss, args); 
    tab.setTag(info); 
    tab.setText(tabHeaderStringId); 
    tab.setTabListener(this); 
    tabs.add(info); 
    bar.addTab(tab); 
    notifyDataSetChanged(); 
} 

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

@Override 
public Fragment getItem(final int pos) { 
    final TabInfo info = tabs.get(pos); 
    return Fragment.instantiate(ctx, info.clss().getName(), info.args()); 
} 

public void onPageScrolled(final int arg0, final float arg1, final int arg2) {} 

public void onPageScrollStateChanged(final int arg0) {} 

public void onPageSelected(final int pos) { 
    bar.setSelectedNavigationItem(pos); 
} 

public void onTabReselected(final Tab tab, final FragmentTransaction ft) {} 

public void onTabSelected(final Tab tab, final FragmentTransaction ft) { 
    final TabInfo tag = (TabInfo)tab.getTag(); 
    for(int i = 0; i < tabs.size(); i++) 
     if(tabs.get(i) == tag) pager.setCurrentItem(i); 
} 

public void onTabUnselected(final Tab tab, final FragmentTransaction ft) {} 
} 

主要布局:
main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_weight="1" 
    android:layout_width="match_parent" 
    android:layout_height="0px">  
</android.support.v4.view.ViewPager> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" 
    android:background="#33FF0000" 
    android:gravity="center" 
    android:layout_weight="0" 
    android:text="statusbar"> 
</TextView> 

</LinearLayout> 

和代码的三个页面:
单/双/ Three.xml/JAVA

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/one" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:gravity="center" > 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="this is tab one" /> 
</LinearLayout> 

public class One extends SherlockFragment { 
@Override 
public View onCreateView(final LayoutInflater inflater, 
      final ViewGroup container, final Bundle savedInstanceState) { 
    return (LinearLayout)inflater.inflate(R.layout.one, container, false); 
} 
} 

回答

1

好吧,我终于解决了它。上面的代码来自于尝试将ViewPager功能添加到我所做的选项卡中。我重新开始并实现了一个常规ViewPager(就像那里的各种示例),然后添加了一个ActionBar。实际的片段内容现在在ViewPager中,并且ActionBar选项卡是空的,但是通过ViewPager回调设置来指示当前的片段。

我仍然不知道原来的尝试有什么问题,但...