- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始 Activity 以打开 GPS然后收到 OnACtivityResult .. 它在某些手机上工作正常,但索尼不工作,我不知道为什么我使用嵌套 fragment 开始 Activity
Intent callGPSSettingIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(
callGPSSettingIntent, openGPSRequest);
然后 fragment 接收
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == openGPSRequest) {
try {
activity.hideProgress();
} catch (Exception e) {
}
activity.replaceCurrentFragment(
FramentNavigationMapInside.getInstance(branche), true, true);
}
}
在主要 Activity 中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
并在每个 fragment 中覆盖 onActivityResult
我在 lenove 和 samsung 上测试它并且工作正常,但是在 sony xperia 上不起作用,只有在主要 Activity 调用中的 onActivityResult
最佳答案
解决我的问题
我们在Fragment的世界中经常遇到的一个常见问题是:虽然我们可以直接从Nested Fragment调用startActivityForResult,但似乎永远不会调用onActivityResult,这给处理Nested Fragment的Activity Result带来了很多麻烦。
解决方案
因此,从现在开始,我们将从 Fragment 调用 getActivity().startActivityForResult(...),而不仅仅是 startActivityResult(...)。像这样:
// In Fragment
Intent intent = new Intent(getActivity(), SecondActivity.class);
getActivity().startActivityForResult(intent, 12345);
因此,所有收到的结果都将在一个地方处理:放置 Fragment 的 Activity 的 onActivityResult。
问题是如何将Activity Result发送到Fragment?由于我们无法以正常方式或至少以简单方式直接与所有嵌套 fragment 通信。另一个事实是,每个 fragment 都知道它必须处理哪个 requestCode,因为它也是调用 startActivityForResult 的那个。所以我们选择“广播到每个在某个时间处于 Activity 状态的 fragment 。让这些 fragment 检查请求代码并做他们想做的事情。”
关于广播,LocalBroadcastManager 可以胜任这项工作,但机制太老了。我选择了另一种选择,即 EventBus,它有很多选择。我选择的是来自广场的奥托。它在性能和稳健性方面非常出色。
dependencies {
compile 'com.squareup:otto:1.3.6'
}
以 Otto 的方式,让我们创建一个总线事件作为一个包含这些 Activity 结果值的包。
import android.content.Intent;
/**
* Created by nuuneoi on 3/12/2015.
*/
public class ActivityResultEvent {
private int requestCode;
private int resultCode;
private Intent data;
public ActivityResultEvent(int requestCode, int resultCode, Intent data) {
this.requestCode = requestCode;
this.resultCode = resultCode;
this.data = data;
}
public int getRequestCode() {
return requestCode;
}
public void setRequestCode(int requestCode) {
this.requestCode = requestCode;
}
public int getResultCode() {
return resultCode;
}
public void setResultCode(int resultCode) {
this.resultCode = resultCode;
}
public Intent getData() {
return data;
}
public void setData(Intent data) {
this.data = data;
}
}
import android.os.Handler;
import android.os.Looper;
import com.squareup.otto.Bus;
/**
* Created by nuuneoi on 3/12/2015.
*/
public class ActivityResultBus extends Bus {
private static ActivityResultBus instance;
public static ActivityResultBus getInstance() {
if (instance == null)
instance = new ActivityResultBus();
return instance;
}
private Handler mHandler = new Handler(Looper.getMainLooper());
public void postQueue(final Object obj) {
mHandler.post(new Runnable() {
@Override
public void run() {
ActivityResultBus.getInstance().post(obj);
}
});
}
}
在 Activity 中
public class MainActivity extends ActionBarActivity {
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ActivityResultBus.getInstance().postQueue(
new ActivityResultEvent(requestCode, resultCode, data));
}
...
}
最后处理 fragment 中的ActivityResult数据
public class BodyFragment extends Fragment {
...
@Override
public void onStart() {
super.onStart();
ActivityResultBus.getInstance().register(mActivityResultSubscriber);
}
@Override
public void onStop() {
super.onStop();
ActivityResultBus.getInstance().unregister(mActivityResultSubscriber);
}
private Object mActivityResultSubscriber = new Object() {
@Subscribe
public void onActivityResultReceived(ActivityResultEvent event) {
int requestCode = event.getRequestCode();
int resultCode = event.getResultCode();
Intent data = event.getData();
onActivityResult(requestCode, resultCode, data);
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Don't forget to check requestCode before continuing your job
if (requestCode == 12345) {
// Do your job
tvResult.setText("Result Code = " + resultCode);
}
}
...
}
希望这段代码能帮助任何人面对这个问题
关于android - 索尼 xperia 的 onActivityResult 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972653/
上周我下载了 Flash tool ,由 Sony 提供,来自开发者世界网站,安装后将自己注册为新用户。 但是,我的帐户似乎没有得到验证。我没有收到任何电子邮件说他们无法验证我的帐户,也没有收到任何电
我是一名经验丰富的 Android 开发人员,我们与一个开发团队一起为 Android 创建了一个应用程序,这是一个用于镜像电视 channel 内容的移动应用程序。我们收到了一个请求,可能会制作一款
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 8年前关闭。 Improve t
我在布局 xml 上显示复选框。 复选框文本包含大约 10 个字符。 此问题特定于 Sony Xperia,其中复选框文本出现在第二行,特别是第二行文本的最后 2 个字符。 我已经在 HTC Her
我正在寻找适用于 Sony Xperia mini 或 Samsung Galaxy mini 手机的 Eclipse 模拟器。我在互联网上找不到任何东西。谁能告诉我是否有模拟器(AVD 插件)或如何
我知道这将是这个的副本 -> How to fix custom watch face time on Sony SmartWatch 2 after SW2 update 但是发布是因为原始问题由于
我开始 Activity 以打开 GPS然后收到 OnACtivityResult .. 它在某些手机上工作正常,但索尼不工作,我不知道为什么我使用嵌套 fragment 开始 Activity In
我正在构建一个需要整页背景图像的应用程序。我使用 Angular JS 和 CSS3 作为背景图片。 在页面加载时, 自定义指令被命中并运行以下代码: var grindModule = angula
我正在尝试使用 opencv java 从网络摄像头 (sony snc p1) 获取图像以进行运动检测。该流采用 mjpeg 格式,我正在使用 opencv 的 VideoCapture 尝试检索图
我最近购买了一台内置互联网功能的索尼 Bravia 电视。它支持许多具有互联网功能的小部件和网络视频流应用程序,适用于 youtube、twitter 和各种 yahoo!产品。我想破解 SDK,但我
在Sony SmartWatch2的控件扩展中,我可以通过onKey接收返回键,但是如何防止扩展终止?我想 Hook 返回键做一些处理,但是按返回键终止扩展。 在 SampleAdvancedCont
我正在尝试开发一个连接到 Sony Felica NFC 芯片并执行 P2P 读/写操作的 Android 应用程序。在 Debug模式下,我可以看到手机与设备建立了连接。当手机在 NFC 设备的范围
我尝试按照本指南为 Sony Xperia Z3 Tablet Compact 构建内核: http://developer.sonymobile.com/knowledge-base/open-so
Android 上的 Sony SmartWatch 2 界面应用程序于 2014 年 4 月 22 日收到了版本 1.4.51 的更新,它似乎已经破坏了第三方应用程序的低功耗模式 (LPM)。至少,
我是一名优秀的程序员,十分优秀!