【问题标题】:How to run different activities in the same view如何在同一个视图中运行不同的活动
【发布时间】:2013-03-20 05:13:50
【问题描述】:

我正在使用以下项目

https://github.com/akotoe/android-slide-out-menu.git开发滑出式菜单应用。

如何通过单击幻灯片菜单中的列表在同一视图中运行不同的活动。

例如,如果我单击项目 1,我想在单独的活动中解析一个 XML 文件,并将该活动作为子项添加到此父视图。因为在每个项目单击时,我想解析一个单独的 XML 文件和我还想在单独的布局文件中表示解析后的数据。所以我需要一个活动来执行此操作,并且我希望将该活动作为子项添加到此父视图中。

我该怎么做,谁能帮我做这件事。

如果我开始一个新的 Intent (startactivity),它会导航给我一个不同的页面。我看不到这个父页面的地方。

【问题讨论】:

标签: android parent-child subactivity


【解决方案1】:

可以嵌入到 Activity 中的 UI 组件应该派生自 Fragment 而不是 Activity。将您的子活动转换为片段时,您需要覆盖 onCreateView 而不是 onCreate 以加载片段的布局。

在您的主要活动的布局中,您可以直接插入您想要最初显示的片段,并为该片段指定一个 ID。然后,您可以使用代码将具有该 ID 的片段替换为不同的片段。

这是一个开始的好地方:http://developer.android.com/guide/components/fragments.html

这个话题太大了,我无法涵盖所有​​内容 - 您确实应该查看 Android 开发人员资源 - 但这里有一些示例。

正如我所说,您可以将初始片段直接放入您的活动布局中。 “片段”位于布局编辑器的“布局”选项卡上。你给那个片段占位符一个“Id”,你可以用它来识别它以及片段类的“名称”,它将在那里开始。

然后当需要切换片段时,您可以使用如下代码:

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment
transaction.replace(R.id.fragment_container, newFragment);

// Commit the transaction
transaction.commit();

【讨论】:

  • 如何将片段添加到 activity_layer_stack.xml 如何在片段类中编写解析逻辑
  • 新片段覆盖了现有片段我如何删除旧片段。
  • transaction.replace() 调用将旧片段替换为新片段。只有一个片段可以在屏幕上显示该 ID。花一些时间研究我链接的 Android 文档页面;它实际上很好地解释了片段的概念以及类如何协同工作。
  • 如果我在每次单击按钮时使用更多片段,则会出现任何内存问题。片段何时会被释放,请您对这两个问题进行一些澄清。
  • 当您使用 transaction.replace()(然后使用 transaction.commit())时,Android 不再引用您的旧 Fragment。只要您没有对自己进行任何引用,旧的 Fragment 就会被垃圾收集。
【解决方案2】:

您不能将活动嵌套在另一个活动中。 但是您可以使用 Fragment instread。 当单击该项目时,只需通过 FragmentManager 向右 Fragment 切换。

【讨论】:

    【解决方案3】:

    先检查这个答案

    How do I create a header or footer button bar for my Android application


    您的项目中可以有一个 Master Activity,

    说,MainActivity.java

    在那个主活动中为滑动菜单编写代码

    @Override
        public void onCreate(Bundle inState) {
            super.onCreate(inState);
    
            mMenuDrawer = new MenuDrawerManager(this, MenuDrawer.MENU_DRAG_CONTENT,
                    MenuDrawer.MENU_POSITION_RIGHT);
    
            mMenuDrawer.setContentView(R.layout.appui);
            mMenuDrawer.setMenuView(R.layout.slide_menu_ui);
    
        }
    

    在同一个活动中,初始化您的菜单组件并为它们编写侦听器

    现在,

    在您的所有其他活动中 extends 来自 MainActivity

    你就完成了。!!

    【讨论】:

    • 如何在每个列表项单击时调用该扩展类
    • 您不需要在每个项目点击时调用扩展类,您只需在基类中拥有那些点击监听器,不需要在其他子类中编写。这就是 OOPS @madanV 的力量
    • 你能告诉我如何编写点击监听器来调用扩展活动
    • @madanV 你检查过我给的答案链接吗,看看这个pastebin.com/0z34ivNq
    • 当我单击菜单项时,它正在打开新活动,而不是关闭幻灯片并覆盖同一布局文件中的现有数据。如果我按下后退按钮,它也正在打开上一个活动我怎么能解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    相关资源
    最近更新 更多