标签: onactivityresult

Android活动生命周期

快速提问 - 活动恢复时首先要做什么?onRestoreInstanceState或onActivityResult?

lifecycle android android-activity onactivityresult onrestoreinstancestate

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

在一个onActivityResult()中处理来自多个活动的数据?

我想知道是否有可能处理活动2中的数据和活动1中有一个的活动3 onActivityResult(),或者我是否需要为每个返回数据的活动设置一个方法?

活动1是应用程序的主要活动.

活动1:

// Handle return value from activity
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        String imageId = data.getExtras().getString("imageId");

        // Do something if data return from activity 2 ??

        // Do something if data return from activity 3 ??
    }
}
Run Code Online (Sandbox Code Playgroud)

活动2

Intent intent = new Intent();
intent.putExtra("imageId", imagePath);
setResult(RESULT_OK, intent); 
finish();
Run Code Online (Sandbox Code Playgroud)

活动3

Intent intent = new Intent();
intent.putExtra("contactId", data);
setResult(RESULT_OK, intent);
finish();
Run Code Online (Sandbox Code Playgroud)

android onactivityresult

6
推荐指数
2
解决办法
6443
查看次数

onActivityResult未被调用

第一个Activity(EditCycle)调用第二个活动(EditChooseLists)

Intent i=new Intent(EditCycle.this,EditChooseLists.class);
startActivityForResult(i, RESULT_OK);
Run Code Online (Sandbox Code Playgroud)

第二个活动(EditChooseLists)就这样结束了

Toast.makeText(EditChooseLists.this, list.get(position), Toast.LENGTH_SHORT).show();            
Intent i=new Intent();
i.putExtra("desc",content);
i.putExtra("content", list.get(position));
setResult(RESULT_OK,i);
finish();
Run Code Online (Sandbox Code Playgroud)

第一个Activity(EditCycle)将onActivityResult方法重写为this

@Override
public void onActivityResult(int requestCode,int resultCode,Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    System.out.print("Test Result !");

    String content=data.getExtras().getString("content");
    System.out.println("result String"+content);
    Toast.makeText(EditCycle.this,content, Toast.LENGTH_SHORT).show();
    TextView t=(TextView)findViewById(R.id.tv_editcycle_cropLbl);
    t.setText(content);
}
Run Code Online (Sandbox Code Playgroud)

然而,当第二个活动恢复时没有任何反应,控制台中没有任何东西,没有吐司,文本视图不变

我的结论是onActivityResult然后没有被调用

有人可以帮忙吗?

android android-intent android-activity onactivityresult

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

在Cordova中传递onActivityResult

Cordova有没有自动方式将onActivityResult传递给它的CordovaPlugin类?

这是我当前的文件,手动执行:

package com.myapp;

import android.os.Bundle;
import org.apache.cordova.*;

import android.content.Intent;

import com.flyingsoftgames.googleplaytoken.GooglePlayToken;

public class MyApp extends CordovaActivity {

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

 @Override public void onCreate (Bundle savedInstanceState) {
  super.onCreate (savedInstanceState);
  super.init ();
  super.loadUrl(Config.getStartUrl());
 }
}
Run Code Online (Sandbox Code Playgroud)


我尝试使用https://github.com/apache/cordova-plugin-camera/blob/master/src/android/CameraLauncher.java中使用的相同技术来"自动"传递数据 - 但它崩溃了.这是目标类的工作(手动和无数据传递)和非工作(自动数据传递)版本.先工作,然后不工作.

工作,没有数据传递:

// Working, no data pass-through.
package com.flyingsoftgames.googleplaytoken;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.Scopes;

import com.google.android.gms.auth.GoogleAuthException;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.UserRecoverableAuthException;

import com.google.android.gms.common.AccountPicker;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaWebView;
import …
Run Code Online (Sandbox Code Playgroud)

java android cordova onactivityresult

6
推荐指数
2
解决办法
6966
查看次数

Android Fragment正在销毁但仍接收onActivityResult

感谢这个答案Android Fragment生命周期问题(onActivityResult上的NullPointerException)我在调用startActivityForResult后在片段中收到NPE时设法重新创建了一个场景.所以我有

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, PHOTO_SELECT_REQUEST_CODE);
break;
Run Code Online (Sandbox Code Playgroud)

从我的片段调用,然后我的活动接收onPause,onStop和onDestroy,因此调用的片段也startActivityForResult获得onDestroy.在我选择一个图像之后,我在我的活动上获得了一个新的onCreate,然后我获得了一个public void onActivityResult现在被破坏的原始片段.

我的问题是,由于这是潜在的(虽然是罕见的)情况,如何恢复传递给它们的整个片段和对象,以及如何防止原始片段泄漏?

android fragment onactivityresult

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

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

我有两个活动,一个是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
查看次数

Android O中DialogFragment中onActivityResult的不同行为

我注意到的Android 7(和前)和Android 8(测试版)时调用之间的差异startActivityForResult,从一个DialogFragment.

MainActivity下面,被压在对话框中,当"OK",解聘本身,创建并显示一个新的对话框,并调用startActivityForResultAnotherActivity.AnotherActivity马上结束.

在Android 7 onActivityResult上,在新的对话框实例上调用.在Android 8上,onActivityResult永远不会被调用.

谁能解释这种差异?

MCVE

public class MainActivity extends AppCompatActivity {

    private static final String FRAGMENT_TAG = "tag";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        new SomeDialogFragment().show(getFragmentManager(), FRAGMENT_TAG);
    }

    public static class SomeDialogFragment extends DialogFragment
    {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState)
        {
            super.onCreateDialog(savedInstanceState);

            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

            builder.setPositiveButton(
                    "OK",
                    new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface d, int which) …
Run Code Online (Sandbox Code Playgroud)

android android-dialogfragment onactivityresult android-8.0-oreo

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

导航组件:获取活动结果

我正在使用NavController来启动一个活动 - 它有自己的导航图 - 用于登录/注册流程。
现在我想在更新 UI时获得LoginActivity(成功、失败)的结果。MainActiviy

MainActvity (start)-> LoginActivity
MainActvity <-(result) LoginActivity end
Run Code Online (Sandbox Code Playgroud)

是否可以使用导航组件来处理这种情况,或者我是否必须使用类似的东西startActivityForResult(LoginActivity...)来获取结果LoginActivity

或者,还有更好的方法?我认为一个可能的解决方案可能是在 Activity 之间使用相同的 viewModel 实例,但不确定这是否可行。:-/

android android-activity onactivityresult android-architecture-navigation

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

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 - 从意图选择器中打开 txt 文件

通过单击某个按钮 - 创建选择 txt 文件的意图:

Intent intent = new Intent()
                    .setType("text/plain")
                    .setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select a TXT file"), 123);
Run Code Online (Sandbox Code Playgroud)

它工作正常 - 我从手机内存上的根文件夹中选择 txt 文件 --- /storage/emulated/0/kote.txt

但是当我尝试从中读取数据时,我得到 FileNotFoundException:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    if(requestCode==123 && resultCode==RESULT_OK) {
        Uri selectedfile_uri = intent.getData();
        Log.e("TAG7", "selectedfile_uri ---   " + selectedfile_uri );

        File myFile_test1 = new File(selectedfile_uri.getPath());
        Log.e("TAG7", myFile_test1.getPath() + "     .exists() "+myFile_test1.exists());

        File myFile_test2 = new File(selectedfile_uri.getEncodedPath());
        Log.e("TAG7", myFile_test2.getPath() + "     .exists() "+myFile_test2.exists());

        function_read_txt_file(myFile_test1); //returns FileNotFoundException …
Run Code Online (Sandbox Code Playgroud)

android filenotfoundexception android-intent onactivityresult

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