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回調設置來指示當前的片段。

我仍然不知道原來的嘗試有什麼問題,但...