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 关注
- 497 浏览
添加回答
举报