Android onActivityResult从不打电话

CQM*_*CQM 2 lifecycle android gallery android-intent android-tabhost

永远不会调用我的onActivityResult方法.我正在使用android 2.2

我正在使用Tabhost,其中TabHosts包含包含单个活动的TabGroup.

我的一项个人活动运行以下意图

 Intent intent = new Intent(); 
 intent.setType("image/*");
 intent.setAction(Intent.ACTION_GET_CONTENT);
 startActivityForResult(Intent.createChooser(intent,
                    "Select Picture"), 0);
Run Code Online (Sandbox Code Playgroud)

这加载我的画廊应用程序,我使用默认的Android库选择一个图像,当我返回我的onActivityResult时,不称为我的活动.

它看起来像这样 - 我给了一个断点if(resultCode == 0),所以现在,我的onActivityResult的逻辑应该不重要

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == 0) {
        if (requestCode == 0) {
            Uri selectedImageUri = data.getData();

            //OI FILE Manager
            filemanagerstring = selectedImageUri.getPath();

            //MEDIA GALLERY
            selectedImagePath = getPath(selectedImageUri);

            //DEBUG PURPOSE - you can delete this if you want
            if(selectedImagePath!=null)
                System.out.println(selectedImagePath);
            else System.out.println("selectedImagePath is null");
            if(filemanagerstring!=null)
                System.out.println(filemanagerstring);
            else System.out.println("filemanagerstring is null");

            //NOW WE HAVE OUR WANTED STRING
            if(selectedImagePath!=null)
                System.out.println("selectedImagePath is the right one for you!");
            else
                System.out.println("filemanagerstring is the right one for you!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

生命周期函数通常被调用乱序,间歇性地调用tabhost/tabgroup中的活动,所以我检查了库关闭后调用了哪些生命周期函数(只要我从android库中选择一个图像就会发生这种情况)

唯一被调用的是onResume()我的TabHost活动.所以我尝试将完全相同的onActivityResult()方法放在我的TabHost类中,就像TabActivity类一样.在方法开头的同一位置使用断点.

这两个类都没有被调用.

我现在画一个空白,如果没有内置的接收方法会响应它,如何从我的应用程序中的gallery应用程序获取结果.

因为我知道我的主要TabHost被onResume()调用,我试着添加Intent graphics = getIntent();以查看它是否会从库选择中接收数据,但它没有,所以我看不出我如何在onResume()方法中执行逻辑.

欢迎解决方案 :)

小智 18

尝试使用包含当前活动的tabgroup活动的上下文来调用startActivityForResult,然后在tabgroup活动中进行监听.

使用它来获取tabGroupActivity:

TabGroupActivity parentActivity = (TabGroupActivity)getParent();
Run Code Online (Sandbox Code Playgroud)

然后从中调用startActivityForResult:

parentActivity.startActivityForResult(...);
Run Code Online (Sandbox Code Playgroud)

最后,在tabGroupActivity中放置一个onActivityResult监听器:

protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
    }
Run Code Online (Sandbox Code Playgroud)


dev*_*nke 16

从诸如此类的许多问题来看,有很多原因导致被叫活动可能无法触发调用者的onActivityResult()方法.

我发现的一个原因是,当我打电话时startActivityForResult(intent, requestCode),requestCode值小于0.我的应用程序不需要a requestCode和Android文档说使用<0将不会发送requestCode.

但Android文档没有提到requestCode<0的后果.结果是它阻止了调用者的onActivityResult()方法被调用!哎哟!

因此,即使您的应用不需要a requestCode,您仍然希望使用值> = 0的应用.

这就是我今天学到的东西:-)