3 回答

TA貢獻1890條經驗 獲得超9個贊
您需要正確的庫來實現所需的庫。
基本上,ViewPager圖書館是您所缺少的。我的建議:
1. ActionbarSherlock
使用起來非常簡單,我不會解釋。
2. ViewPagerExtensions
你可以在這里找到它。下載ZIP文件并從中創建一個新項目。
我只能將此設置設為靜態,我想創建一個類似android market app(Swype Movement)的應用。
com.astuetz.viewpager.extensions.SwipeyTabsView從該項目實施。有易于理解的示例。它確實滿足您的需求。甚至還有其他選項卡樣式可供選擇(包括ICS附帶的新“人員”選項卡)。此外,對其進行樣式設置以使其與您的應用程序身份匹配非常容易。
3。 FragmentPagerAdapter
最后,來自支持庫(v4)的該類。
祝您好運,如果您需要更多幫助,請隨時問我。
如果您使用的是我建議的內容instantiateItem,FragmentPagerAdapter則無需覆蓋。你只需要
為構造函數提供a FragmentManager并調用super實現;
重寫getCount以返回尋呼機中的片段數,并且
getItem,這將用于返回您的片段以進行創建。
這是我在這里的代碼中的一個示例(完整的工作示例)。這是實現尋呼機的活動的內部類:
static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 2;
}
@Override
public Fragment getItem(int position) {
Fragment f;
switch(position) {
case 0:
f= new ItemSalesDataFragment();
break;
case 1:
f= new DepartmentChooserFragment();
break;
default:
throw new IllegalArgumentException("not this many fragments: " + position);
}
return f;
}
}
如您所見,此尋呼機處理兩個“頁面”,左側顯示銷售數據。右邊的允許用戶選擇哪個部門。這些將在getItem方法中返回。適當的片段(您可以使用現有的任何片段,無需修改)。
如預期的那樣,您可以通過以下兩種方式將所有這些結合在一起:1)創建一個實例化的對象MyFragmentPagerAdapter,以及2)將適配器設置為您的ViewPager對象,使其成為您剛剛實例化的類。如您所見,其getItem方法將“賦予”尋呼機所需的所有片段。例:
mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
當然,還有其他事情要做,例如自己創建選項卡按鈕并將所有這些都結合在一起進行交叉通信。我建議查看從GitHub下載的ViewPagerExtensions ZIP文件中提供的示例。這只是您評論中問題的答案。如您所見,使用該庫的代碼并不多。

TA貢獻1840條經驗 獲得超5個贊
實際上,除了ABS庫和支持庫之外,我實際上沒有其他任何問題。這是我的代碼:
public class ActionBarTabs extends SherlockFragmentActivity {
CustomViewPager mViewPager;
TabsAdapter mTabsAdapter;
TextView tabCenter;
TextView tabText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
mViewPager = new CustomViewPager(this);
mViewPager.setId(R.id.pager);
setContentView(mViewPager);
ActionBar bar = getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
mTabsAdapter = new TabsAdapter(this, mViewPager);
mTabsAdapter.addTab(bar.newTab().setText("Home"),
ToolKitFragment.class, null);
mTabsAdapter.addTab(bar.newTab().setText("FujiSan"),
FujiFragment.class, null);
}
public static class TabsAdapter extends FragmentPagerAdapter implements
ActionBar.TabListener, ViewPager.OnPageChangeListener {
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
static final class TabInfo {
private final Class<?> clss;
private final Bundle args;
TabInfo(Class<?> _class, Bundle _args) {
clss = _class;
args = _args;
}
}
public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) {
super(activity.getSupportFragmentManager());
mContext = activity;
mActionBar = activity.getSupportActionBar();
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
TabInfo info = new TabInfo(clss, args);
tab.setTag(info);
tab.setTabListener(this);
mTabs.add(info);
mActionBar.addTab(tab);
notifyDataSetChanged();
}
@Override
public int getCount() {
return mTabs.size();
}
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(),
info.args);
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mActionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Object tag = tab.getTag();
for (int i = 0; i < mTabs.size(); i++) {
if (mTabs.get(i) == tag) {
mViewPager.setCurrentItem(i);
}
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
}
您可以根據以下內容加載選項卡內容。
mTabsAdapter.addTab(bar.newTab().setText("Home"),
YOURFRAGMENTHERE.class, null);
如您所指,這將為您帶來ABS,支持庫和片段的可愛“滑動選項卡”效果。ABS確實使這幾乎與處理本機庫相同。實際上,我直接從Google的分頁選項卡示例中復制了此代碼,并為ABS進行了少許修改。
希望這可以幫助!
- 3 回答
- 0 關注
- 524 瀏覽
添加回答
舉報