带有选项卡和 Viewpager 的 Android Fragments

2023-11-25

enter image description here

我们正在构建一个如上所示的具有片段嵌套的应用程序。

  1. 选项卡特色 - 详细信息选项卡和地图选项卡
  2. 详细信息选项卡将有一个幻灯片 - 就像“查看页面滑块”和下面可滚动的信息。
  3. 地图选项卡将显示地图。

enter image description here

我已经实现了选项卡、地图以及滑块,如上所示。现在我很困惑如何在滑块下方添加内容以使“详细信息”选项卡可滚动。

我尝试过什么?

单击“详细信息”选项卡时,片段将尝试在其中扩展两个片段布局。

AndroidTabLayoutActivity.java

package com.mink7.abs;

import com.viewpagerindicator.CirclePageIndicator;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import java.util.Random;
import android.support.v4.app.FragmentTabHost;
import com.viewpagerindicator.PageIndicator;

import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class AndroidTabLayoutActivity extends TabActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                // FragmentTabHost tabHost;

                setContentView(R.layout.main);
                // tabHost = (FragmentTabHost) findViewById(R.id.tabMode);

                TabHost tabHost = getTabHost();

                /*
                 * mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
                 *
                 * mPager = (ViewPager) findViewById(R.id.pager);
                 * mPager.setAdapter(mAdapter);
                 *
                 * mIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
                 * mIndicator.setViewPager(mPager);
                 */

                // Tab for Photos
                TabSpec photospec = tabHost.newTabSpec("Details");
                photospec.setIndicator("Details",
                                getResources().getDrawable(R.drawable.icon_photos_tab));
                Intent photosIntent = new Intent(this, DetailsActivity.class);
                photospec.setContent(photosIntent);

                // Tab for Songs
                TabSpec songspec = tabHost.newTabSpec("Maps");
                // setting Title and Icon for the Tab
                songspec.setIndicator("Maps",
                                getResources().getDrawable(R.drawable.icon_songs_tab));
                Intent songsIntent = new Intent(this, MapsActivity.class);
                songspec.setContent(songsIntent);

                // Tab for Videos
                /*
                 * TabSpec videospec = tabHost.newTabSpec("Videos");
                 * videospec.setIndicator("Videos",
                 * getResources().getDrawable(R.drawable.icon_videos_tab)); Intent
                 * videosIntent = new Intent(this, VideosActivity.class);
                 * videospec.setContent(videosIntent);
                 */

                // Adding all TabSpec to TabHost
                tabHost.addTab(photospec); // Adding photos tab
                tabHost.addTab(songspec); // Adding songs tab
                // tabHost.addTab(videospec); // Adding videos tab
        }

}

详情Activity.java

package com.mink7.abs;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import com.viewpagerindicator.CirclePageIndicator;

public class DetailsActivity extends BaseSampleActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.place_details_layout);

        mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);


    }
}

BaseSampleActivity.java

package com.mink7.abs;

import java.util.Random;

import com.viewpagerindicator.PageIndicator;

import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public abstract class BaseSampleActivity extends FragmentActivity {
    private static final Random RANDOM = new Random();

    TestFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    //FragmentTabHost mTabHost;


    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.random:
                final int page = RANDOM.nextInt(mAdapter.getCount());
                Toast.makeText(this, "Changing to page " + page, Toast.LENGTH_SHORT);
                mPager.setCurrentItem(page);
                return true;

            case R.id.add_page:
                if (mAdapter.getCount() < 10) {
                    mAdapter.setCount(mAdapter.getCount() + 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;

            case R.id.remove_page:
                if (mAdapter.getCount() > 1) {
                    mAdapter.setCount(mAdapter.getCount() - 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

请注意,自 Android 4.2 或最新的兼容库开始支持片段嵌套。以前根本不支持它。至于下面的内容 - 只需将它们全部放入另一个容器中即可

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

带有选项卡和 Viewpager 的 Android Fragments 的相关文章

随机推荐

  • 如何让 Spinner 项目在被单击时以全宽显示在其自身下方,就像在 G+ 应用程序上一样

    背景 Google 有一个类似旋转器的视图 显示很多项目 但所有项目都显示在其下方 我需要在我自己的旋转器中模仿这一点 这是我被告知的 但截至最近 材料设计指南说 here Spinner 应该将其项目放在自身之上 这就是支持库为它所做的事
  • 为什么在构造标准中使用前缀增量被认为比后缀增量更好

    我最近安装了格子风格插件Eclipse并且个人认为非常棒 但它给我的警告之一有点晦涩难懂 确切的警告是 使用 不允许 这是关于postfix的 在某些行中 例如 for int i 0 i lt SOMETHING i 好的 我知道fore
  • C# Windows7/Vista风格ListView

    when I create a ListView in details view in VS2008 it creates a rather old looking listview It doesnt have any of the fa
  • 用 C 或 C++ 创建目录

    如何用C代码创建目录 除了fork和使用mkdir的方法 有类似 dirent h 的东西吗 dirent h 只允许读取目录 不使用外部库 Use the mkdir 函数 include
  • 我可以将一个方法作为java中另一个方法的参数传递吗?

    我正在尝试测量几种方法的执行时间 所以我想创建一个方法而不是多次重复相同的代码 这是我的代码 private void MeasureExecutionTime Method m startTime System nanoTime try
  • Android:如何构建像 Android UI 页面上显示的选项卡

    因此 android 不遗余力地构建了这个漂亮的 UI 指南供每个人使用 但我没有看到任何地方显示如何构建这些元素的代码示例 可以在此处找到选项卡的 UI 指南 http developer android com design build
  • char数组的内存分配

    假设你有 struct Person char name int age int height int weight 如果你这样做 struct Person who malloc sizeof struct Person C 如何知道要分
  • 我可以在 Entity Framework Core 中的连接数据库上触发事件吗?

    我有一个 DbContext 可以访问我的 Postgresql DB 但是当连接会话与 DB 启动时 我需要运行一个小 SQL 命令 我需要为每次交互执行此操作 更具体地说 它是一个用于设置记录用户名的会话变量的函数 可以在 EF Cor
  • 如何在不注册的情况下使用 Win32 中的 .Net 程序集?

    我想从 Delphi Win32 应用程序动态加载和使用用 C 创建的 Net 程序集 我的类和接口被标记为 ComVisible 但我想避免注册程序集 这可能吗 附 我在这里找到了链接文本关于该主题的另一个很好的讨论 但它更多地围绕托管
  • 自定义元素的绑定上下文 - 它到底是什么,如何访问父虚拟机

    我在文档中找不到答案 所以我在这里提问 传递给的绑定上下文到底是什么bind自定义元素的方法 它简单地等于路由器当前活动的 ViewModel 至少 这是我到目前为止所发现的 为什么它不是元素的父级 就 DOM 而言 VM 用这个代码 cu
  • 如何弯曲CGMutablePath?

    具有以下形状 我想知道你如何让它像这样弯曲 也类似 我假设所有的圆 线都被打包成一个CGMutablePath 然后对它应用某种曲线 圆弧或四边形曲线 尽管我很难复制它 有谁知道如何做到这一点 在第一个示例中 您从具有多个闭合子路径的路径开
  • 用于处理文件路径的 Qt 类[重复]

    这个问题在这里已经有答案了 可能的重复 Qt 相当于 PathAppend Qt 中有处理文件路径的类吗 特别是我正在寻找像 NET 的 Path Combine 这样的东西 我知道 boost filesystem 中有一个 但我想知道
  • Scala 开关在成功匹配后继续匹配下一个案例

    我该如何在 scala switch 语句中执行一个 case 块后开始执行另一个 case 块 在java中 没有中断的情况 switch step case 0 do something case 1 do something more
  • .dll 文件无法访问

    我正在尝试将 dll 添加到我的项目中 当我 添加引用 并尝试添加它时 它告诉我 无法添加对 的引用 请确保该文件 可访问 并且它是有效的程序集或 COM 组件 顺便说一句 我正在尝试添加 g729 dll 我怎样才能添加dll 你必须re
  • 垂直进度条

    VS 2005 SP3 我曾多次使用进度条 但是 我需要一个垂直的 但是 我找不到任何可以旋转它的属性 进度条是否始终处于水平位置且无法更改 非常感谢 尝试这个 public class VerticalProgressBar Progre
  • PHP 和 MySQL 之间的周数差异

    我有以下查询 SELECT COUNT WEEK date YEAR date FROM myTable GROUP ON YEAR date WEEK date 假设它产生以下结果 32 33 2012 43 34 2012 39 35
  • 将彩色控制台输出捕获到 WPF 应用程序中

    如同这个问题 除了 WPF 应用程序中包含的控制台程序会生成彩色输出 因此如果我能够捕获颜色和文本 那就太好了 这是我的第一个 WPF 程序 我不知道如何查找 修改正确的控件 目前我只是使用一个 TextBox 它可以工作 但只能捕获纯文本
  • 如何配置 Geany 来编译和运行我的 Python 程序?

    在 构建 菜单下 我可以看到 执行 选项 但它是灰色的 唯一可用的选项是 设置包含和参数 当我单击时 两个字段都已填写 我必须在那里写什么 I don t need to configure anything in Geany I just
  • 寻找一种使用 NSArray 作为一堆按钮的插座的方法

    我的用户界面有四个按钮 它们都会共享一些共同的行为 例如跟踪区域创建之类的事情 我正在寻找的是一个解决方案 所以我不必这样做 interface MyController NSWindowController NSButton button
  • 带有选项卡和 Viewpager 的 Android Fragments

    我们正在构建一个如上所示的具有片段嵌套的应用程序 选项卡特色 详细信息选项卡和地图选项卡 详细信息选项卡将有一个幻灯片 就像 查看页面滑块 和下面可滚动的信息 地图选项卡将显示地图 我已经实现了选项卡 地图以及滑块 如上所示 现在我很困惑如