actionbarsherlock 使用选项卡导航 选项卡导航

2023-12-10

我有一个后期需求更改,需要选项卡导航。我已经在我的应用程序中使用了 ActionBarSherlock。以前我的用户界面由活动组成。但是,据我了解,TabBar 需要片段活动吗?我有什么办法可以保留现有代码并实现 TabBar 或者这需要完全重写我的应用程序?我的所有活动都扩展了 SherlockActivity 吗?

亲切的问候,

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragmentActivity;




public class NewMainActivity extends SherlockFragmentActivity implements ActionBar.TabListener,
        ViewPager.OnPageChangeListener
{
    private ViewPager mViewPager;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.textlayout);
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(new MainPagerAdapter(getSupportFragmentManager()));
        mViewPager.setOnPageChangeListener(this);
        //mViewPager.setPageMarginDrawable(R.drawable.border);
        mViewPager.setPageMargin(16);
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar.newTab().setText("First Tab").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Second Tab").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Third Tab").setTabListener(this));
    }

    @Override
    public void onPageScrollStateChanged(int arg0)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageSelected(int arg0)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft)
    {
        mViewPager.setCurrentItem(tab.getPosition());

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft)
    {
        // TODO Auto-generated method stub

    }

    private class MainPagerAdapter extends FragmentPagerAdapter
    {
        public MainPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            switch (position)
            {
            case 0:
                // return (mFragmentA = new FragmentA());

            case 1:
                // return (mFragmentB = new FragmentB());

            case 2:
                // return (mFragmentC = new FragmentC());

            }
            return null;
        }

        @Override
        public int getCount()
        {
            return 3;
        }
    }
}

当然,您不必重新编写您的应用程序。您只需要一些折射即可。

首先,您应该首先将代码移至SherlockFragment(s).

假设您有 3 项活动:ActivityA, ActivityB and ActivityC.

1 - 创建 3 个 SherlockFragment:FragmentA, FragmentB and FragmentC.

2 - 将代码移至片段并进行必要的修改(例如覆盖、上下文引用等)。

3 - 现在使用选项卡导航设置主 FragmentActivity:

public class MainActivity extends SherlockFragmentActivity implements
        ActionBar.TabListener, ViewPager.OnPageChangeListener {

    private FragmentA mFragmentA;
    private FragmentB mFragmenB;
    private FragmentC mFragmentC;

    private ViewPager mViewPager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(new MainPagerAdapter(
                getSupportFragmentManager()));
        mViewPager.setOnPageChangeListener(this);
        mViewPager.setPageMarginDrawable(R.drawable.border);
        mViewPager.setPageMargin(16);
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar.newTab().setText(R.string.tab_a_title)
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText(R.string.tab_b_title)
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab()
                .setText(R.string.tab_c_title).setTabListener(this));
    }

    @Override
    public void onPageSelected(int position) {
        getSupportActionBar().setSelectedNavigationItem(position);
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    private class MainPagerAdapter extends FragmentPagerAdapter {
        public MainPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return (mFragmentA = new FragmentA());

            case 1:
                return (mFragmentB = new FragmentB());

            case 2:
                return (mFragmentC = new FragmentC());

            }
            return null;
        }


        @Override
        public int getCount() {
            return 3;
        }
    }
}

main_layout.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_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

</LinearLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

actionbarsherlock 使用选项卡导航 选项卡导航 的相关文章

随机推荐

  • 有没有办法查看架构验证失败的位置?

    我正在尝试根据某种复杂的 模式 如空手道文档中定义 验证 json 我得到的错误并不那么明确 reason not equal 我如何检查它实际上在哪里验证失败 真的很抱歉 这都是我的错 我知道这对你没有帮助 但我现在正在重写空手道的核心
  • 如何定义一个地图接受 Thrift 中不同类型的值?

    我用 thrift 定义了一个结构 struct QuerySetRecord 1 string recordId 2 string crawlerName 3 string recordType 4 map
  • 仅删除 HTML 字符串中标签之间的多余空格

    嗨 我有一个 HTML 字符串 例如 div p You have received an alert from project span class fields Project Name span br p p span class f
  • 我可以暂停和恢复线程吗?

    我正在尝试创建一个线程 它在后台执行操作 我需要能够在需要时有效地 暂停 它 并在以后再次 恢复 它 另外 如果当我 暂停 线程时线程正在执行某些操作 它应该使调用线程等待 直到它完成正在执行的操作 我对 Python 中的多线程还很陌生
  • 如何使用 REST 将数据从 AngularJS 发布到 Struts 2

    我需要从客户端获取到服务器端的值 我正在使用 AngularJS 和 Struts2 REST 我的控制器没有获取传递的值 还是我传递或使用 RESTful 控制器时出错了 这是我的代码 angularcontroller js app c
  • Android Studio 意外的顶级异常:

    今天 我遇到了一个巨大的错误 不允许我在手机上运行示例项目 当 Android Studio 构建项目时 它首先显示以下目标 UP TO DATE demoproject processDebugResources UP TO DATE d
  • 如何获取java中两个日期之间的日期列表?如何还包含/排除开始日期/结束日期?

    我已经尝试过堆栈溢出中给出的示例java中如何获取两个日期之间的日期列表 该代码完美运行 但有一个小问题 我的列表中也没有得到结束日期 如何选择包含 排除开始日期并包含结束日期 我可以使用remove 和add 手动执行此操作吗 或者Jod
  • 将 checkstyle-configuration 从声纳导入到 eclipse-checkstyle-plugin

    我想从声纳导出 checkstyle 规则并将它们导入到 checkstyle eclipse 插件中 不幸的是 sonar 将 checkstyle 规则导出到 csv 文件 但 checkstyle 插件只接受 xml 文件的导入 有什
  • SignalR 2.2 和 ARR3.0 负载平衡

    我正在使用 signalr2 2 Web 应用程序并托管在 IIS 8 中 这里我尝试使用ARR3 0为我的应用程序实现负载均衡 在我的服务器场中 我连接了两台服务器并将路由规则设置为 加权循环 每个服务器都有一个带有 HTML 页面的 j
  • 如何将文本文件从 jar 复制到 jar 外部的文件中?

    假设我的 jar 包 com test io 中有一个名为 test txt 的文件 我将如何编写一个类来检索该文本文件 然后将内容复制到文件系统上的新文件中 假设所述 jar 在您的类路径上 URL url getClassLoader
  • 我找不到 Android keytool

    我正在尝试遵循 Android 映射教程并且到了这部分我必须获得 API 密钥 我已经找到了我的debug keystore但似乎没有keytool应用程序在目录中 C Documents and Settings tward androi
  • Range(Cells()) 中的运行时错误 1004

    我在许多宏中有以下代码 但它需要大量我不需要的信息 公式如下 Range A1 h BD h Value Worksheets ABC1 Range A h BD h Value 我尝试将公式更改为更动态的版本 如下 Sub MFGI NA
  • 将 P 值添加到组内比较箱线图

    我正在尝试创建一个箱线图 它仅显示箱线图中每个条形的组内的显着 p 值 例如 它会比较 I1 和 SI2 的 一般 良好 非常好 等 我尝试使用以下代码来实现上面的情节 library ggplot2 library dplyr data
  • 三元运算符与 if 语句的优点

    我正在浏览一些代码 发现其中有一些三元运算符 这段代码是我们使用的一个库 它应该非常快 我在想除了空间之外我们是否还可以节省任何东西 你的经验是什么 表现 三元运算符的性能与编写良好的等效运算符不应有差异if else声明 它们很可能解析为
  • Android Studio 通知管理器错误

    我编写了一段代码 以便在信标范围内时弹出通知 我的通知代码如下 private void showNotification String message Log d Hay8 DCM8 Intent intent new Intent co
  • _Generic 宏中传递的指针类型不兼容

    以下代码生成 2 个警告 如问题标题中所述 include
  • 将 SceneKit 场景导出为 Collada .dae 文件的最简单方法?

    我有一个算法生成的 SceneKit 场景 我希望能够将其导出为 Collada dae 文件 例如用于 iBooks Author 中 由于 SceneKit 可以导入 Collada 文件 我认为也可能有办法导出它们 但在 API 中找
  • 使用 HttpClient 在“适配器已分离”和“无包装连接”之间切换

    所以正如我所说 当我尝试运行时 我在这两个错误之间来回跳动HttpClient execute HttpPost 得到IllegalStateException public class NetMethods private static
  • 更改占位符一部分的颜色[重复]

    这个问题在这里已经有答案了 如何只更改占位符的一部分 这是我的html div class col md 4 p class form row form row wide p div
  • actionbarsherlock 使用选项卡导航 选项卡导航

    我有一个后期需求更改 需要选项卡导航 我已经在我的应用程序中使用了 ActionBarSherlock 以前我的用户界面由活动组成 但是 据我了解 TabBar 需要片段活动吗 我有什么办法可以保留现有代码并实现 TabBar 或者这需要完