使用要显示最后一个活动的活动组在选项卡之间切换 - Tab ActivityGroup

2023-12-14

我已经为我的 Android 应用程序编写了选项卡。

我的问题是使用它想要显示最后一个活动的活动组在选项卡之间切换。我想在导航选项卡时显示上次打开/访问的屏幕。我的方法是转到第一个屏幕:

我需要在浏览选项卡时显示上次打开的屏幕

选项卡 1 -> 销售。这里面包含10个屏幕(活动) 选项卡 2 -> 管理。这包含 5 个屏幕(活动) 选项卡 3 -> 设置。里面包含 8 个屏幕。 (活动)

我单击选项卡 1,它加载选项卡 1 的屏幕,其中包含销售路线列表。然后我单击一个销售路线,它会转到第一个选项卡中的零售商列表。然后我单击选项卡 3“设置”完成一些工作并返回对于销售,此时它应该在“销售”选项卡中显示最后打开的屏幕。

当我单击选项卡时,它应该显示上次打开的活动怎么做?

我确实喜欢这样。请指出我想根据我的要求更改代码的位置。

MainActivity.登录后会调用

  public class MainActivity extends TabActivity {
int selectedTab;
TabHost tabHost ;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabview);

    TabHost t = getTabHost();
    tabHost = (TabHost)findViewById(android.R.id.tabhost);

    TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
    TabSpec secondTabSpec = tabHost.newTabSpec("tid1");
    TabSpec thirdTabSpec = tabHost.newTabSpec("tid1");
    /** TabSpec setIndicator() is used to set name for the tab. */
    /** TabSpec setContent() is used to set content for a particular tab. */
    firstTabSpec.setIndicator("Sales").setContent(new Intent(this,SalesActivityGroup.class));
    secondTabSpec.setIndicator("Admin").setContent(new Intent(this,SettingActivityGroup.class));
    thirdTabSpec.setIndicator("Setting").setContent(new Intent(this,SettingActivityGroup.class));


    tabHost.addTab(firstTabSpec);
    tabHost.addTab(secondTabSpec);
    tabHost.addTab(thirdTabSpec);
    tabHost.setCurrentTab(0);
    tabHost.setMinimumHeight(25);
}

public void onTabChanged(String arg0) {
        selectedTab = tabHost.getCurrentTab();

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(false);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

}

第一个 Tab1(销售)的 SalesGroupActivity

 public class SalesActivityGroup extends ActivityGroup {

public static SalesActivityGroup group;
private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.history = new ArrayList<View>();
    group = this;

    View view = getLocalActivityManager().startActivity("Sales",
            new Intent(this, SalesRouteActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();

    replaceView(view);

}

public void replaceView(View v) {
    history.add(v);
    setContentView(v);

}

public void back() {
    if (history.size() > 0) {
        history.remove(history.size() - 1);
        if (history.size() > 0) {
            setContentView(history.get(history.size() - 1));
        } else {
            finish();
        }
    } else {
        finish();
    }
}

@Override
public void onBackPressed() {
    SalesActivityGroup.group.back();
    return;
}

Edited这是 FirstTab 的第一个活动 - SalesRouteActivity

    public class SalesRouteActivity extends ListActivity{
     TableLayout tl;
     static int positions = 0;
     static String keyword ="";
     int uploadSize = 0;
     private NotificationManager mNotificationManager;
     private int SIMPLE_NOTFICATION_ID;
     String strBusinessUnit = "";   
     String strExecutive = "";
     String strTerritoryCode = "";
     SimpleAdapter sd;
     View row = null;
     View selectRow = null;

     @Override
     public void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);
         setContentView(R.layout.sales_routes);

         SharedPreferences myPrefs = this.getSharedPreferences("myLogedPrefs",MODE_WORLD_READABLE);
         strBusinessUnit = myPrefs.getString("BusinessUnit", "");
         strExecutive = myPrefs.getString("Executive", "");
         strTerritoryCode = myPrefs.getString("TerritoryCode", "");

         ArrayList<SalesRoutes> routeList = getSalesRoute();

         ArrayList<HashMap<String, String>> routhPath = new ArrayList<HashMap<String, String>>();
         for (int i = 0; i < routeList.size(); i++) {
            if(Integer.parseInt(routeList.get(i).getOutlets()) >0){
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("routeCode",((SalesRoutes) routeList.get(i)).getRouteCode());
                map.put("routeName",((SalesRoutes) routeList.get(i)).getDescription());
                map.put("outlets", ((SalesRoutes) routeList.get(i)).getOutlets());
                routhPath.add(map);
             }
         }

         ListView list = getListView();
         sd = new SimpleAdapter(this, routhPath, R.layout.route_path,new String[] {"routeCode","routeName","outlets" },new int[] { R.id.routeCode,R.id.routeName,R.id.outlets});
         row = getLayoutInflater().inflate(R.layout.route_path_row, null, false);
         getListView().addHeaderView(row);
         list.setAdapter(sd);
         list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        list.setSelected(true);
        list.setTextFilterEnabled(true);
        list.setItemsCanFocus(true);
        list.setItemChecked(positions, true);
        list.setSelectionAfterHeaderView();

        if (routeList.size() > 0) {
            keyword = routeList.get(0).getRouteCode();
        }

        uploadSize = new UploadActivity().getUploadTable();

        if (uploadSize > 0) {
            mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            final Notification notifyDetails = new Notification(R.drawable.icon, "New Alert, Click Me!",System.currentTimeMillis());
            Context context = getApplicationContext();
            CharSequence contentTitle = "Upload Available...";
            CharSequence contentText = "Browse Android Official Site by clicking me";
            Intent notifyIntent = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("http://www.android.com"));
            PendingIntent intent = PendingIntent.getActivity(SalesRouteActivity.this, 0, notifyIntent,android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
            notifyDetails.setLatestEventInfo(context, contentTitle,contentText, intent);
            mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        HashMap<String, String> hashMap = (HashMap<String, String>) l.getItemAtPosition(position);
        keyword = hashMap.get("routeCode");

        positions = position;
        if(position == 0 ){


        }else if(position != 1){
            Intent showContent = new Intent(v.getContext(),SalesRouteDevitionActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("RouteCode", keyword);
            showContent.putExtras(bundle);
            getParent().startActivityForResult(showContent, 5);
        }else{
            Intent intent = new Intent(SalesRouteActivity.this, ListRetailerActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("RouteName", keyword);
            intent.putExtras(bundle);
            View view = SalesActivityGroup.group.getLocalActivityManager().startActivity("", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();  
            SalesActivityGroup.group.replaceView(view);

        }
    }

    @Override  
    public void onBackPressed() {  
        SalesActivityGroup.group.back();  
    } 

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public ArrayList<SalesRoutes> getSalesRoute(){
         DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(this);
          try {
              dbAdapter.createDataBase();
         } catch (IOException e) {
              Log.i("*** select ",e.getMessage());
         }
         dbAdapter.openDataBase();       
         String sql = "SELECT RouteCode, Description, OutletsAttached  " +
                       "FROM WMRoute  " +
                       "WHERE ActiveStatus = '1' AND  RouteDefaultExecutive = ? AND  BusinessUnit = ? AND TerritoryCode = ?  " +
                       "ORDER BY RouteCode  ";

         String[]d = new String[]{strExecutive,strBusinessUnit,strTerritoryCode};
         ArrayList stringList = dbAdapter.selectRecordsFromDBList(sql, d);
         dbAdapter.close();
         ArrayList<SalesRoutes> salesRoutesList = new ArrayList<SalesRoutes>();
         for (int i = 0; i < stringList.size(); i++) {
            ArrayList<Object> arrayList = (ArrayList<Object>) stringList.get(i);
            ArrayList<Object> list = arrayList;
            SalesRoutes salesRoutes = new SalesRoutes();
            try {
                salesRoutes.setRouteCode((String) list.get(0));
                salesRoutes.setDescription((String) list.get(1));
                salesRoutes.setOutlets((String)list.get(2));

            } catch (Exception e) {
                Log.i("***" + SalesRouteActivity.class.toString(), e.getMessage());
            }
            salesRoutesList.add(salesRoutes);
        }
        return salesRoutesList;
    }
}

当您在选项卡之间切换时,可能会一次又一次地创建我的活动组 因此,组只想创建一次,并在我在选项卡之间切换时恢复

每个屏幕的详细信息/内容都从数据库获取。

我面临这个问题超过两天了......请帮助我。 请帮助我解决这个问题......

提前致谢.....


我认为你必须覆盖onBackPressed()您正在打开的内部活动activity-group

在下面写一段代码每项活动您在活动组中打开的

@Override  
public void onBackPressed() {  
       SalesActivityGroup.group.back();  
} 

并且还替换了onBackPressed()与以下代码TABHOST

@Override
public void onBackPressed() {
    super.onBackPressed();
}

祝你好运

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

使用要显示最后一个活动的活动组在选项卡之间切换 - Tab ActivityGroup 的相关文章

  • 改造中如何使用HashMap发布数据?

    您能解释一下如何使用以下方式发布数据吗hashmap in 改造2 这就是我发的帖子 FormUrlEncoded POST getProfile Call
  • 使用 gradle-retrolambda 和 Lightweight-Stream-API 过滤 Android 中的对象列表

    我正在尝试在我的 Android 应用程序中过滤 Java 中的对象列表 为此我遵循这个答案 https stackoverflow com a 13140130 3546389 Java 8建议 但由于Android SDK不支持Lamb
  • adb shell 输入带有空格的文本

    如何发送带有空格的文本 例如 一些文字 using adb shell input text 找到以下解决方案 adb shell input text some stext 工作正常 但是有什么简单的方法可以用 s 替换空格吗 Examp
  • 如何检测手机一整圈(360 度)?

    由于我在网络上搜索没有找到任何相关答案 因此我发布了有关检测的问题360度转弯使用加速度计绕其轴的 Android 设备 例如 在横向模式下围绕 y 轴 假设在起始位置 y 值为 0 设备平坦于地面 当手机向前旋转 90 度时y 10 18
  • 使用 ViewPager 从 Activity 到 Fragment 的通信

    我有一个 Activity 和两个 Fragmentstablayout含有一个viewpager 现在我可以通过实现谷歌的指南回调接口从片段到活动进行通信 但我怎样才能以另一种方式沟通从活动到片段 如果活动中发生了一些事情 外部事件 我想
  • 为什么Android room不建议使用allowMainThreadQueries()?

    我正在创建一个小型应用程序 仅在数据库中保存一些计数器 如果不存在 请插入一个 如果是的话 增加更新 该应用程序没有任何用户界面 它是一个保存和读取数据 少量表 少量记录 的插件 我可以用吗允许主线程查询 在这种情况下 每次我读到一些关于这
  • Android 偏好设置中的“是”或“否”确认[重复]

    这个问题在这里已经有答案了 我需要在 设置 中实现 重置 选项 单击该设置后 将打开一个简单的对话框 要求确认 我看过了DialogPreference但我似乎无法在任何地方找到好的解决方案或教程 有人可以帮我吗 我是初学者 想法甚至代码都
  • openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

    作为一名 Android 开发新手 我遇到了一些奇怪的问题 我想创建一个类 它方法其他类 活动 任何可以用于以某种特殊方式处理文件的类 假设为了简单起见 我们将记录一些内容 如果我在活动中执行以下操作 例如在 OnClick 侦听器中 则一
  • Ionic 4:硬件后退按钮重新加载应用程序

    从事项目并陷入问题 硬件后退按钮重新加载应用程序 我在此应用程序中使用 Angular Router 我退出应用程序的代码 ionViewDidEnter this subscription this platform backButton
  • Android 中的处理程序到处理程序与 Messenger 到 Messenger 通信

    问题 使用起来是否 更好 更快且开销更少 Handler http developer android com reference android os Handler html与使用 Handler 通信相比信使 http develop
  • 使用audioSessionId值实例化AudioFx类?

    我已经阅读了 Android API 并尝试在互联网上搜索有关声明自定义audioSessionId然后用它audioSessionId初始化 AudioFx 类并为我的 MediaPlayer 或 AudioTrack 分配硬编码audi
  • Android TextView 中的等宽表格数字

    我有一个自定义字体 默认情况下具有可变宽度数字字形 并且我想在 Android 中使用该字体的等宽表格数字功能TextView使数字垂直对齐 也就是说 改变如下 像这样的事情 要选择字体的表格数字功能 请使用TextView s fontF
  • 在 Unity 中构建 apk 应用程序时包含文件

    在unity中构建apk文件时如何将文件和文件夹添加到apk文件中 我需要的是在Android上安装应用程序后 在应用程序的父目录 android data com company product files 中存在一些文件和文件夹 这是我
  • 标签栏随键盘一起上升

    这个问题之前已经发过 但是没有答案 Problem TabBar gt 2 个选项卡 选项卡一有一个Scrollview and an EddiText 标签二 其他 贴带时EditText 软键盘上升 TabBar与它一起 一个丑陋的解决
  • android gradle插件-离线安装

    我必须在离线电脑上安装 android gradle 插件 通过谷歌搜索 我了解到我可以通过本地 Maven 存储库来做到这一点 但从不成功的尝试和所有关于这个问题的质量保证中我知道这并不简单 我从来没有和maven一起工作过 有经验的人可
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • Google 的 Android OpenGL 教程是否教授了错误的线性代数?

    在帮助另一位用户解决有关该问题的问题后响应触摸事件 http developer android com training graphics opengl touch htmlAndroid教程 我下载了源代码 并且对我所看到的感到非常困惑
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • 突出显示菜单抽屉/滑动菜单中的所选项目

    使用的库 https github com SimonVT android menudrawer https github com SimonVT android menudrawer https github com JakeWharto
  • 如何检查设备上是否安装了电子邮件客户端

    我需要检查设备上是否安装了电子邮件客户端 我使用了以下代码 但它对我不起作用 public boolean isIntentAvailable final PackageManager packageManager getApplicati

随机推荐

  • 有没有办法防止空值被保留,同时允许其他值通过?

    我有一个现有的 JPA EclipseLink 项目 其中所需的行为是 如果在实体的字段中给出空值 则不应保留该空值 用例是我们可以从外部来源获得这些实体的一些部分更新 这些来源可能会给我们一个空值 这并不意味着 使该字段无效 而是意味着
  • Android Espresso 测试应用流程

    我使用 Espresso 来测试很多活动以及它们之间的转换 我想为这些活动编写不同的测试 并将活动意图链接到相应的测试用例 1 活动 A testActivityA 运行 2 应调用活动启动器活动B testActivity B 是否可以使
  • 如何设置禁用 DIV 元素的样式

    我可以让输入元素响应 hover and hover disable 但看起来 div 的反应不一样 btn width 99px border color 2px 787878 background color CACACA margin
  • 如何对部署在 Tomcat 上的 Jersey Web 应用程序进行单元测试?

    我正在构建部署在 Tomcat 上的 Jersey Web 应用程序 我很难理解如何对应用程序进行单元测试 通过简单地实例化我的测试中的类并调用它们的方法 这与 Jersey 或 Tomcat 无关 可以测试核心业务逻辑 非 Jersey
  • 在不同函数中使用字符串名称

    我需要使用movies list从第二个函数中的第一个函数开始 我怎么做 def movie movies list movie strip for movie in movies list movie explorer def rand
  • laravel 4 雄辩的热切加载关系计数

    我有一个具有多个定义关系的复杂模型 在这个例子中我想计算Like模型并创建一个名为likes因此它可以从 REST 服务返回 是否可以将模型计数加载到动态属性中 beat Post with array user likes gt func
  • 如何将字体与我的 .net winforms 应用程序捆绑在一起?

    我想为我的 net 3 0 Winforms 应用程序使用非标准字体 该字体可能安装在我的某些用户的计算机上 但在其他一些计算机上显然会丢失 如何将字体与我的程序一起发送 我需要安装字体吗 如果是这样 缺乏管理员权限会成为问题吗 您必须使用
  • html标签“/href”和navlink或Link之间的区别

    html标签 href 和react router提供的用于导航页面的navlink有什么区别 我可以使用两者来将页面导航到不同的 URL 那么为什么需要引入 Navlink 或 Link The href属性将触发页面刷新 从而重置应用程
  • Yii2 Pjax 和 ActiveForm beforeSubmit 重新加载后不起作用?

    我正在提交按钮上创建一个加载指示器 并使用 registerJs 函数将 开始 过程附加到 beforeSubmit 事件 第一次它可以正常工作 但是在重新加载 Pjax 容器后 再次提交表单时该事件将不会触发 我将整个视图文件包含在 Pj
  • C++ 极小极大函数

    我已经在 Google 和 Stackoverflow 上搜索了这个问题 但我仍然不明白 minimax 函数是如何工作的 我发现维基百科条目有该函数的伪代码版本 function integer minimax node depth if
  • 需要 ext-mongodb ^1.5.0 symfony

    我安装了 ext mongodb php ri mongodb php ri mongodb grep 版本 MongoDB extension version gt 1 5 1 libbson bundled version gt 1 1
  • Cassandra CQL - 将 system.local 表中的 release_version 列转换为 int

    我正在 cql 中编写一个查询 检查 Cassandra 的发行版本是否大于或等于 3 11 10 select from system local where release version gt 3 11 10 由于release ve
  • 在 C++ 中使用布尔值按位运算符

    在 C 中是否有任何理由不使用按位运算符 和 来表示 bool 值 有时我会遇到这样的情况 我希望两个条件之一恰好为真 XOR 所以我只是将 运算符放入条件表达式中 有时我还希望对条件的所有部分进行评估 无论结果是否为真 而不是短路 因此我
  • 区分磁盘模型的类型

    Tensorflow有几个模型格式的类型 TensorFlow SavedModel 2 Frozen 模型 3 会话捆绑包 4 Tensorflow Hub 模块 如何在磁盘上区分它们 稍后与tensorflowjs converter一
  • 如何在C中的UDP客户端/服务器中向sento和recvfrom添加延迟

    对于学校的编程项目 我们必须使用 tcp 协议和 udp 协议设计基本的客户端 服务器设置 我已经使用 C Socket 库中的 read 和 write 使 TCP 正常工作 我现在需要创建一个 可靠的UDP 系统 例如 当服务器收到长度
  • Java中如何在一定时间后停止执行?

    在代码中 变量计时器将指定结束 while 循环的持续时间 例如 60 秒 while timer run terminate after 60 sec long start System currentTimeMillis long en
  • Xcode 屏幕截图 EAGLContext [重复]

    这个问题在这里已经有答案了 可能的重复 如何从EAGLView获取UIImage 所以我只是想知道是否有人知道如何将 EAGLContext 中存储的内容保存为 UIImage 我目前正在使用 UIGraphicsBeginImageCon
  • 我正在尝试将 Sequelize 与 Next JS API 路由一起使用

    我正在尝试将 Sequelize 与 Next JS API 路由一起使用 但我几乎在第一个障碍处就跌倒了 无论我做什么 我似乎都无法将模型导入到我的route js 文件中 import nextConnect from next con
  • C++ 的 C 包装器:如何处理 C++ 模板?

    早些时候询问如何为 C 类编写一个 C 包装器 C 的 C 包装 基本就清楚了 但还有一个问题 如何处理 C 模板 假设这是我的课 template
  • 使用要显示最后一个活动的活动组在选项卡之间切换 - Tab ActivityGroup

    我已经为我的 Android 应用程序编写了选项卡 我的问题是使用它想要显示最后一个活动的活动组在选项卡之间切换 我想在导航选项卡时显示上次打开 访问的屏幕 我的方法是转到第一个屏幕 我需要在浏览选项卡时显示上次打开的屏幕 选项卡 1 gt