簡體   English   中英

帶有操作欄,片段和ViewPager的Android GUI

[英]Android gui with actionbar, fragments and viewpager

你好!

我已經進行了很長時間的編程,但是剛開始為android開發,至少可以說與c ++完全不同。

無論如何,我正在嘗試實現帶有某些選項卡的gui,它應該能夠在向左/向右滑動時更改選項卡。 這些選項卡是使用actionbar(或精確地說是ActionBarSherlock)實現的,並通過支持庫中的ViewPager進行滑動。 各個選項卡是片段(即SherlockFragment:s)。 在底部應該有某種狀態欄,僅顯示一些文本。

我遇到的問題是這些選項卡從未顯示。 我在頂部看到帶有徽標/標題的操作欄,下面有一個選項卡列表。 在屏幕底部,我看到狀態欄文本,但僅此而已。

如果我取消注釋//context.setContentView(pager); 在SwipeBar()構造函數中,顯示了選項卡的內容,但隨后不顯示狀態欄。 (無論如何,這行感覺很不對勁,但是如果沒有它,我無法弄清楚如何在選項卡中獲取一些內容。)

我已經嘗試了所有我能想到的。 我已經閱讀了所有可以找到的相關內容,並嘗試分配了有關如何單獨執行每個功能的不同示例。 但是,將它們結合起來……我只是無法解決這個問題。 非常感謝您的幫助!


我的主要(活動)課程:
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);
}
}

這是我的類,實現actionbar / viewpager / fragments:
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>

以及三個頁面的代碼:
一/二/三.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);
}
}

好的,我終於解決了。 上面的代碼來自嘗試將ViewPager功能添加到我完成的選項卡中。 我重新開始並實現了常規的ViewPager(如那里的各種示例所示),然后添加了ActionBar。 現在,實際的片段內容在ViewPager中,並且ActionBar選項卡為空,但通過ViewPager回調進行設置以指示當前片段。

我仍然不知道最初嘗試有什么問題...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM