android - Actionbarsherlock + 选项卡 + 多 fragment ?

标签 android tabs android-fragments actionbarsherlock

我已经非常努力地让 actionbarsherlock + 选项卡 + fragment 正常工作。

我只能让这个设置作为静态工作,我想创建这个像 android 市场应用程序(滑动移动)。

当您需要对包含多个 fragment 的布局进行膨胀时,我会卡住。

在 Support4demos 中,我得到了 FragmentsTabsPager 作为示例。

最佳答案

实际上,除了 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、支持库和 fragment 。 ABS 确实使这与使用 native 库几乎相同。实际上,我直接从 Google 的分页选项卡示例中复制了这段代码,并为 ABS 稍作修改。

希望这会有所帮助!

关于android - Actionbarsherlock + 选项卡 + 多 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082163/

相关文章:

Android Firebase 身份验证 : verify account and reset password within the App

Android GoogleMap 需要激活吗?

android - 在 Android 中绘制弹丸运动路径

c# - 使用 C#,如何在多行文本框中设置制表符位置?

使用ListFragment和SQLite数据库进行Android设计

java - 当我将 IntentService 与 ResultReceiver 一起使用时,当我的 Activity 被销毁时会发生什么

reactjs - 在material-ui Tab容器中实现react hooks useState不起作用

javascript - 如何添加带有独立 router.js 文件的 Vuetify 选项卡?

java - 从 Fragment 外部更新 TextView

Android 下载多个文件并在 ListView 中显示进度