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