android FragmentActivity 不响应 onKeyDown事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android FragmentActivity 不响应 onKeyDown事件相关的知识,希望对你有一定的参考价值。

在2.3.5系统的android手机上开发,继承FragmentActivity 的activity不响应onKeyDown事件,怎么解决? 知道了,是因为布局中嵌入了Fragment导致的。多谢回答

参考技术A 首先
你需要的这个
fragment
必须在当前activity中实例化了。然后你需要在
fragment中写get方法。然后就完了。如:在fragment中写public
void
setonclicklistenerforbangdingzhanghu_ok(onclicklistener
onclicklistenerbangdingzhanghu_ok.setonclicklistener(onclicklistener);
activity中
fragment.setonclicklistenerforbangdingzhanghu_ok(this);

如何在 Android Wear 应用程序的 FragmentActivity 中启用环境模式(始终开启)?

【中文标题】如何在 Android Wear 应用程序的 FragmentActivity 中启用环境模式(始终开启)?【英文标题】:How to enable Ambient Mode (Always On) in a FragmentActivity on an Android Wear App? 【发布时间】:2016-06-10 11:03:32 【问题描述】:

我有一个包含 FragmentActivity 的 Android Wear 应用:

public class MyFragmentActivity extends FragmentActivity

有 2 个片段:

public class MyFirstFragment extends Fragment

public class MySecondFragment extends Fragment

我想在这个片段活动中启用环境模式(始终开启)。但是,根据documentation,环境模式只有在我扩展WearableActivity时才可用。

有没有办法将FragmentActivityWearableActivity 的两个属性合二为一?

还有其他方法可以在FragmentActivity 中启用环境模式吗?

【问题讨论】:

是的,扩展 FragmentActivity 并实现 AmbientMode.AmbientCallbackProvider。 【参考方案1】:

你应该实现AmbientModeSupport.AmbientCallbackProvider而不是WearableActivity,然后你可以扩展FragmentActivity

这是新的首选方法,它仍然为您提供 WearableActivity 的所有好处,但也允许您使用 Activity(或任何子类...FragementActivity 等)。

Official docs call out the details (and example code).

更新:现在使用 AmbientModeSupport 代替 AmbientMode。 Google 最近更改了名称,因此旧版本已弃用。

【讨论】:

你知道是否可以只在某些 Fragment 上启用环境模式而不是全部?我只想要几个 Fragments 来支持环境模式,其他的应该像平常一样关闭应用程序。 您通常使用 AmbientModeSupport.attach(this) 在 onCreate() 的 FragmentActivity 中启用环境支持。相反,您可以创建一个 Activity 必须实现的自定义接口,该接口触发附加/分离 (AmbientModeSupport) 以启用/禁用环境。在您的片段中,您可以检查父 Activity 是否属于该自定义接口(如果不是,则抛出错误)并存储参考。然后,您可以通过这种方式针对投射的界面触发环境模式。那应该可以。 顺便说一句,如果有帮助,您可以设置一个 Fragments 必须实现的自定义接口来告诉 Fragments 为环境更新屏幕(onEnterAmbientFragment、onExitAmbientFragment 等)。当 Activity 获取回调(onEnterAmbient、onExitAmbient 等)时,您的活动将存储一个引用以触发每个片段中的更新。您可以将其与上述解决方案结合使用。 谢谢,这真的很有帮助。这看起来是最好的方法,但我无法找到“分离”AmbientModeSupport 的方法。所以当我启用环境模式支持时,我不知道如何再次禁用它。你知道怎么做吗? AmbientModeSupport 有一个 detach() 方法(参见下面的链接)。 :) 我认为这是可行的。我认为 attach() 方法启用了环境模式,所以...... detach() 应该禁用它,尽管你必须尝试。 developer.android.com/reference/android/support/wear/ambient/…【参考方案2】:

这两个问题的答案都是,抱歉。

环境模式通过调用WearableActivity.setUseAmbient() 启用,如果您不扩展WearableActivity,显然不可用。而且由于 Java 不支持多重继承,因此您不能同时继承 WearableActivityFragmentActivity - 它是其中之一。

你真的需要在 watch Activity 中使用 Fragments 吗?如果您真的想支持环境模式,您可能需要考虑将您的 UI 从片段中移出。

【讨论】:

【参考方案3】:

如果您想在 Android Wear 上使用 Fragments 并支持 Ambient 模式,则需要使用 AmbientModeSupport 类。

让您的活动扩展FragmentActivity 并实施AmbientModeSupport.AmbientCallbackProvider,一切就绪!

详细信息和示例在这里:https://developer.android.com/training/wearables/apps/always-on#ambient-mode-class

【讨论】:

以上是关于android FragmentActivity 不响应 onKeyDown事件的主要内容,如果未能解决你的问题,请参考以下文章

Android 关于Toolbar和FragmentActivity的问题

将参数从 Android FragmentActivity 传递给 Fragment

Android Studio 无法解析 fragmentActivity 和 ViewPager 导入

android FragmentActivity 不响应 onKeyDown事件

Android FragmentActivity 和 Tabs 的问题

在 Android 上使用 FragmentActivity.getIntent().getExtras() 时出现 NullPointerException