为了账号安全,请及时绑定邮箱和手机立即绑定

Actionbarsherlock +选项卡+多个片段?

Actionbarsherlock +选项卡+多个片段?

MMMHUHU 2019-12-21 13:21:30
我非常努力地使actionbarsherlock +选项卡+片段正常工作。我只能将其设置为静态,我想创建一个类似android market app(滑动运动)的应用。当您需要为内部包含多个片段的布局充气时,我会陷入困境。在Support4demos中,我以FragmentsTabsPager为例。
查看完整描述

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文件中提供的示例。这只是您评论中问题的答案。如您所见,使用该库的代码并不多。


查看完整回答
反对 回复 2019-12-21
?
慕斯709654

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进行了少许修改。


希望这可以帮助!


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 497 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信