在Android中导航活动的最有效方法

时间:2014-12-19 10:00:16

标签: android android-layout android-activity android-fragments android-navigation

我还处于Android开发的早期阶段,我想创建一个有很多Fragments的应用。

首先,我看过Eric Burke关于Android Anatomy的演讲,其中说片段无法取代Activity。您无法制作仅包含一个Activity和多个Fragments的应用。即使可以完成,数据流也会变得一团糟。

所以,我知道在API < 7我们可以使用TabActivityActivityGroupTabHost来浏览Activity。所以这就是我的要求。

我是否可以进行一些导航(例如Tabs/ActionBar),即使我在切换Activity时仍然显示,而不使用弃用的方法?即使ActionBar导航模式已弃用API 21

所以也许,任何人都可以给我一些建议,不使用Tabs进行导航。

3 个答案:

答案 0 :(得分:0)

我同意你最好不要创建一个只包含一个活动和多个片段的应用程序,也许你想结合ViewPager查看PagerAdapter }。因此,您可以在片段之间滑动而无需Tabs。但ViewPager也可以与标签结合使用。

答案 1 :(得分:0)

我有一个只使用一个活动和几个片段的应用程序。使用操作栏上的按钮或完成后台进程等事件在片段之间切换。

带有两个图标“info”和scan:

的操作栏示例
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {    
        FragmentManager fm1 = getFragmentManager();
        FragmentTransaction ft1 = fm1.beginTransaction();
        MainFragment mainFragment = (MainFragment) getFragmentManager().findFragmentByTag("Main_Fragment");


        switch (item.getItemId()) {
            case R.id.action_info:
                if (fm1.findFragmentByTag("Info_Fragment") == null) {        //Check if Fragment is already open
                    ft1.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.back_enter, R.anim.back_exit);
                    ft1.replace(R.id.content_layout, new InfoFragment(), "Info_Fragment")
                            .addToBackStack(null)
                            .commit();
                }
                return true;

            case R.id.action_scan:       
                    if (fm1.findFragmentByTag("Scan_Fragment") == null) {        //Check if Fragment is already open
                    ft1.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.back_enter, R.anim.back_exit);
                    ft1.replace(R.id.content_layout, new InfoFragment(), "Scan_Fragment")
                            .addToBackStack(null)
                            .commit();
              }
                return true;
        }
    }

通过BroadcastRecievers与主要活动进行沟通

答案 2 :(得分:0)

我回答你在评论中提出的问题(并对延迟表示道歉)。

你的问题是:

  

好的,只是为了说清楚。我想制作一个应用程序,一个商场   目录应用。所以,我需要5个标签,每个标签有2个视图,主要   视图和详细视图(片段或活动,有些是列表   查看,有些是寻呼机视图)。例如,在标签2中,将有商城   租户(listview),当你点击其中一个项目时,它会弹出   租客的详细信息。在另一个标签上,我们说我们有促销活动   如果我们单击一个选项卡,它们与选项卡2(列表视图)具有相同的视图   该项目,它将带我们到详细视图。

     

所以,我想从应用程序中得到的是,所有导航都将使用   选项卡,即使单击,操作栏/导航选项卡也不会移动   列表项并将我们带到详细视图。那么,我应该创建1   所有片段的活动,或3个活动(主菜单,促销,   租户)每个活动有2个片段(我有2页菜单   将带有查看寻呼机)?我非常感谢你的回答   我的问题。真的,非常感谢

这是您的重要要求:the action bar/navigation tab will not move even if I click the list item and bring us to the detail view.

通过多于1项活动,您无法做到这一点。请记住,在任何给定时间,您只能有1个活动active(无双关语)。这意味着,您的活动将托管他们自己的操作栏/导航选项卡版本。这反过来意味着,如果您有多个活动,当您在它们之间进行转换时,您的操作栏将不可避免地发生变化。您可以通过在所有活动中使用相同的操作栏来尝试解决此问题,但这并未改变此论点。

您的应用程序看起来很简单,可以处理1个活动和2个片段 - 每个屏幕/选项卡有1个托管列表视图(您的详细视图可能是一个对话框,因为您希望它弹出&#39;弹出&# 39)。

只有当您开始添加越来越多的功能时,添加多个活动的价值才会变得明显。我最近(几个小时前)回答了关于碎片和活动的另一个问题。我认为阅读可能有帮助:Why not always use fragments with one activity

  

如果您有任何疑问,请告诉我,但请添加@kha   我收到通知,可以更快地回答你。