我的主要 Activity 扩展了 ListActivity,现在我必须实现一个支持旧版本的 ActionBar。
我已经阅读了有关执行此操作的方法,并且我决定尝试这种方式:
我下载了ListActivity的源代码,我修改了一些东西,现在我需要在这里实现ActionBar,所以我尝试将此Activity扩展到ActionbarActivity。这样,我将拥有一个自定义的 ActionBarListActivity,并且我可以将我的 Activity 扩展到这个自定义类,然后具有 ListActivity 和 ActionBar 的功能。
这些是我已完成的步骤:
- 将支持 v7 库添加到我的项目
- 将 @Style/Theme.AppCompat 设置为应用程序主题
但是当我尝试将 Activity 扩展到 ActionBarActivity 时,不允许我这样做,它说“ActionbarActivity 无法解析为类型”并建议将其更改为“ActionBar”(android.app)。我知道我必须导入“import android.support.v7.app.ActionBarActivity”,但它不允许我这样做。
那么,这里出了什么问题?
最佳答案
一种更简单的方法(下载源代码等)是将列表分解为 fragment ,然后将 fragment 包含在 Activity 中。我将概述实现这一目标的步骤:-
- 将列表拆分为它自己的布局 XML。因此,您最终将得到 2 个 XML - 一个用于 Activity “容器”,这将非常简单 - (请参阅步骤 2),另一个用于新的 fragment 布局,这将是列表的整体布局,但最重要的是包括一个
<ListView>
元素)。 - 包括
<FrameLayout>
Activity 布局 XML 中的占位符(作为 fragment 的容器)。它将嵌套在顶层布局内(<RelativeLayout>
将作为顶层)。为占位符指定一个 ID,例如myFragmentHolder
. - 创建一个新的 Fragment 类(扩展
ListFragment
),名为MyListFragment
. - 将所有列表代码(例如 ArrayAdapter 代码等)移至新的 fragment 类中
- 您的 Activity 代码现在实际上只是一个包含 fragment 并管理 ActionBar 的外壳。要支持列表 fragment ,需要
onCreate()
是调用setContentView()
并替换 fragment :-getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_ENTER_MASK).replace(R.id.myFragmentHolder, new MyListFragment(), "MY_LIST").commit();
。 (“MY_LIST”是用于标识 fragment 的任意标记名称。它可以是任何内容 - 请阅读文档以获取更多信息)。 - 您的 Activity 仍应延续
ActionBarActivity
.
现在您已经很好地分离了关注点。 Activity 管理 ActionBar,Fragment 管理 List。
关于android - ListActivity 与 ActionBar 支持 v7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21157660/