标签: startactivityforresult

Android片段中的startActivityForResult()vs getActivity().startActivityForResult()

Android Fragment中startActivityForResult()vs 之间的区别是什么getActivity().startActivityForResult()onActivityForResult()在片段中调用时的行为差异是什么?

android android-fragments startactivityforresult

8
推荐指数
1
解决办法
749
查看次数

在第一次运行后调用时,finish()不关闭活动

我有三个活动

  • MessagesAttachPhotoActivity
  • MessageGalleryFolderSelectorActivity
  • ImagePickerActivity

MessagesAttachPhotoActivity呼吁MessageGalleryFolderSelectorActivitystartActivityForResult().

MessageGalleryFolderSelectorActivity 活动显示手机上的照片文件夹,一个选择文件夹.

ImagePickerActivity然后调用setActivityForResult().一旦选择了图像ImagePickerActivity,它就会被传递回MessagesAttachPhotoActivityvia MessageGalleryFolderSelectorActivity.

当我第一次运行应用程序时,一切正常.但是,如果我之后尝试再次选择图像,MessageGalleryFolderSelectorActivity则不会在之后关闭setResult().

我已经打过电话finish(),this.finish(),((Activity)getApplicationContext()).finish(),并super.onBackPressed()没有成功.

为什么活动不会在连续运行中关闭?

这是我的代码:

调用MessageGalleryFolderSelectorActivity:

Intent intent;
Bundle arguments = new Bundle();

Bundle bundle;
intent = new Intent(this, MessageGalleryFolderSelectorActivity.class);
bundle = new Bundle();
bundle.putInt(Constants.INTENT_EXTRA_LIMIT, Constants.IMAGES_SELECT_LIMIT);
bundle.putInt("Request", MessageThread.MessageType.IMAGE);
intent.putExtras(bundle);
startActivityForResult(intent, MessageThread.MessageType.IMAGE);
Run Code Online (Sandbox Code Playgroud)

ImagePickerActivity:

imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_MODE,
                      ImagePickerActivity.MODE_MULTIPLE);
imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_LIMIT, 10);
imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_SHOW_CAMERA, false);
imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM,album);

//imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES, images);
startActivityForResult(imagesIntent, MessageThread.MessageType.IMAGE);
Run Code Online (Sandbox Code Playgroud)

将数据传递回MessageGalleryFolderSelectorActivity:

Intent data = …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-activity startactivityforresult

7
推荐指数
1
解决办法
1900
查看次数

当第二个活动方向发生变化时,registerForActivityResult 不起作用

我使用 来从活动 A 调用活动 B,ActivityResultLauncher并在任务完成时设置活动 B 的结果。如果方向不改变,这将非常有效。问题是当我从活动 B 更改方向然后设置结果时,则registerForActivityResult不会调用活动 A。有人可以告诉我,可能是什么问题吗?

startActivityForResult注意:如果我使用和 ,我不会遇到这个问题onActivityResult。我将其更改为ActivityResultLauncherasstartActivityForResult弃用

活动A示例代码:

private lateinit var launcher: ActivityResultLauncher<Intent>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(layout)
    setLauncherResult()
}

private fun setLauncherResult() {
    launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            //Do operations here
        }
}

 //On button click starting activity B using launcher
 val intent = Intent(activityA, activityB)
 launcher.launch(intent)

}
Run Code Online (Sandbox Code Playgroud)

活动B示例代码:

//setting result
val …
Run Code Online (Sandbox Code Playgroud)

android android-intent kotlin kotlin-android-extensions startactivityforresult

7
推荐指数
1
解决办法
9901
查看次数

删除后按下后退按钮更新购物车计数

我有两个活动,一个是UserActivity,另一个是CartActivity我正在展示产品清单UserActivity.点击按钮,AddtoCart我将产品添加到购物车.我正面临这个问题:

当我添加单击按钮AddtoCart时,操作栏中有一个购物车图标,我textview在该购物车图标上有一个显示购物车计数器的自定义布局.每当我点击按钮时,该计数器就会更新AddtoCart.现在我转到CartActivity并删除购物车中的一些产品.现在按回按钮返回时UserActivity,计数器文本视图不会更新.

我已经阅读了几个关于按下后退的更新的方法,如问题中的" 返回"按钮和刷新之前的活动.答案中给出的两种方法是通过覆盖结果的OnResume()方法UserActivity或启动结果的活动.

我想我需要将一个名为DeleteCounterfrom 的变量传递CartActivityUserActivity当我按下后退按钮并从计数器中的原始产品数中减去它TextView并更新文本视图.

这是部分代码,UserActivity我有这个代码只更新购物车计数器的功能,当我点击一个按钮时调用.另外onActivityResult()在这个评论中的代码我从上面的答案尝试了SO问题链接.它没有成功:

    public class UserActivity extends AppCompatActivity{
            private int cartindex = 0;
            private TextView counterTV = null;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_user);

                Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
                setSupportActionBar(toolbar);
            }
//    @Override
//    protected void onActivityResult(int requestCode, int …
Run Code Online (Sandbox Code Playgroud)

java android cart onactivityresult startactivityforresult

6
推荐指数
1
解决办法
1212
查看次数

startActivityForResult 和返回堆栈

背景:我的应用程序 (A) 被其他应用程序 (B) 用来代表执行操作。

预期结果 :

  • 应用程序 B 崩溃 => 应用程序 A 和所有启动的线程崩溃。
  • 或启动应用程序在其自己的应用程序窗口上的活动。

当前的行为: startActivityForResult应用B(窗口)中打开应用程序A的所谓活动,所以当我崩溃的应用程序B中的应用一onDestroybaseActivity的调用,但不应用A.推出的螺纹,情况并非如此。如果我startActivity是使用singleTasklaunchMode,因此,使用后一种方法,我在应用程序 A 窗口中启动了应用程序 A 活动,而不是在应用程序 B 窗口内启动,因此我可以模拟应用程序 A 的崩溃,并得到预期的结果。

根据Ian Lake 的评论,似乎无法在其自己的应用程序返回堆栈中启动应用程序 A 的活动。

[编辑 1]

想分享这个信息:

  • 当我直接通过启动器图标启动我的应用程序并杀死它时 => 进程立即被终止。

  • 当我通过 startActivityForResult => 启动我的应用程序时,该进程在大约 2/3 秒后被终止。

检查使用:

adb shell
top -m 5
Run Code Online (Sandbox Code Playgroud)

android android-intent android-lifecycle startactivityforresult

6
推荐指数
0
解决办法
294
查看次数

androidx 中已弃用的 OnActivityResult()

OnActivityResult()在 androidx 中已弃用。我参考了以下链接 https://developer.android.com/training/basics/intents/result https://developer.android.com/jetpack/androidx/releases/activity https://proandroiddev.com/is- onactivityresult-deprecated-in-activity-results-api-lets-deep-dive-into-it-302d5cf6edd 我在我的项目中实现了注册事情..like .我通过注册活动来创建 resultcontract 代替startActivityForResult i 替换 resultcontract.launch(intent)并获得结果resultcontract (按照上面的链接)。现在我怀疑打开 gps 的功能。为此,我们使用了

 val rae = e as ResolvableApiException
    rae.startResolutionForResult(context, GPS_REQUEST)
Run Code Online (Sandbox Code Playgroud)

早些时候 startActivityForResult,现在 startResolutionForResult 对如何获得 gps 请求的结果感到困惑(在代码中,我们在 onActivityResult 中获得结果)。我该如何使用新方法实现这一点?

android deprecated onactivityresult startactivityforresult androidx

6
推荐指数
1
解决办法
1389
查看次数

从IME开始生成活动结果

我正在开发一个应用程序,它应该将一些文本返回给启动意图的应用程序.

但启动意图的应用程序是IME /软键盘.因此,StartActivityForResult不可用,因为IME是一项服务.

我怎样才能做到这一点?

到目前为止我得到了什么:

键盘:

final Intent intent = new Intent("com.example.helloworld.GETTEXT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.putExtra("keyboard", true);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

其他应用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Bundle extras = getIntent().getExtras();
    if (extras == null){                
        return;
    } else {
        finish();
    }
}

@Override
public void finish() {
    Intent data = new Intent();
    data.putExtra("test", "PASSED");
    setResult(RESULT_OK, data);
    super.finish();
}
Run Code Online (Sandbox Code Playgroud)

android android-intent startactivityforresult

5
推荐指数
1
解决办法
554
查看次数

Android:setResult没有将结果返回到Parent Activity

我使用startActivityForResult从父活动开始了一个子活动.在子活动中执行所需的功能后,我使用setResult设置结果.但是我没有从儿童活动得到父母活动的结果.

继承我的代码.

以下是我如何从父活动中调用我的子活动.

 Intent i = new Intent(MainActivity.this, Child.class);
    i.putExtra("ID", intID);
    i.putExtra("aID", aID);
    i.putExtra("myMsg", myMsg);
    startActivityForResult(i, 1);
Run Code Online (Sandbox Code Playgroud)

这是我从我的孩子活动设置结果的方式.

 @Override
    public void onBackPressed() {
        super.onBackPressed();
     Intent resultInt = new Intent();
     resultInt.putExtra("Result", "Done");
     setResult(Activity.RESULT_OK, resultInt);
     finish();
}
Run Code Online (Sandbox Code Playgroud)

这是我的onActivityResult

   @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1) {

        if (resultCode == Activity.RESULT_OK) {
            if(data!=null) {
                Toast.makeText(MainActivity.this, "Data received", Toast.LENGTH_SHORT).show();
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这里我检查resultCode == Activity.RESULT_OK的时间是假的.我还检查了在if if条件之外传递的意图及其返回的null. …

android android-intent android-activity onactivityresult startactivityforresult

5
推荐指数
1
解决办法
4695
查看次数

片段中的Android onActivityResult

我尝试在片段中获得结果。片段中的代码

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode != Activity.RESULT_OK) return

    val bundle = data?.extras
    when (requestCode) {
        LicenseActivationActivity.REQUEST_RESULT_COUNT_ENTERPRISE ->
     //
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码被调用。而且还有 DrawerActivity 中的 onActivityResult 方法

是否只在片段中调用 onActivityResult ?

更新

DrawerActivity 中的这段代码

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK) {
        WayBillsActivity.start(this)
        finish()
    }
}
Run Code Online (Sandbox Code Playgroud)

不知为何,也满足了,不过是在fragment中的onActivityResult之后。

android fragment kotlin startactivityforresult

5
推荐指数
2
解决办法
5486
查看次数

startActivityForResult(...) 立即返回 0

当我调用startActivityForResult(new Intent(getActivity(), VkAuth.class), VK_ID);三星时(在 HTC 和 Nexus 上一切正常),onActivityResult在创建 VkAuth 活动之前调用 requestCode == VK_ID 和结果代码 0(已取消)。
父 Activity 具有android:launchMode="singleInstance". startActivityForResult从附加到父 Activity 的 Fragment 调用。日志

E/AuthenticationFragment: vkLogIn
E/AuthenticationFragment: startActivityForResult 9101
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/MainActivity: onActivityResult before super: request - 271245, result - 0
E/AuthenticationFragment: request - 9101, result - 0
E/MainActivity: onActivityResult after super: request - 271245, result - 0
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/VkAuth: onCreate
E/VkAuth: onResume
Run Code Online (Sandbox Code Playgroud)

android android-intent startactivityforresult

3
推荐指数
1
解决办法
1159
查看次数