快速提问 - 活动恢复时首先要做什么?onRestoreInstanceState或onActivityResult?
lifecycle android android-activity onactivityresult onrestoreinstancestate
我想知道是否有可能处理活动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) 第一个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然后没有被调用
有人可以帮忙吗?
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) 感谢这个答案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现在被破坏的原始片段.
我的问题是,由于这是潜在的(虽然是罕见的)情况,如何恢复传递给它们的整个片段和对象,以及如何防止原始片段泄漏?
我有两个活动,一个是UserActivity,另一个是CartActivity我正在展示产品清单UserActivity.点击按钮,AddtoCart我将产品添加到购物车.我正面临这个问题:
当我添加单击按钮AddtoCart时,操作栏中有一个购物车图标,我textview在该购物车图标上有一个显示购物车计数器的自定义布局.每当我点击按钮时,该计数器就会更新AddtoCart.现在我转到CartActivity并删除购物车中的一些产品.现在按回按钮返回时UserActivity,计数器文本视图不会更新.
我已经阅读了几个关于按下后退的更新的方法,如问题中的" 返回"按钮和刷新之前的活动.答案中给出的两种方法是通过覆盖结果的OnResume()方法UserActivity或启动结果的活动.
我想我需要将一个名为DeleteCounterfrom 的变量传递CartActivity给UserActivity当我按下后退按钮并从计数器中的原始产品数中减去它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) 我注意到的Android 7(和前)和Android 8(测试版)时调用之间的差异startActivityForResult,从一个DialogFragment.
在MainActivity下面,被压在对话框中,当"OK",解聘本身,创建并显示一个新的对话框,并调用startActivityForResult了AnotherActivity.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
我正在使用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
我使用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
通过单击某个按钮 - 创建选择 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
android ×10
onactivityresult ×10
java ×2
android-architecture-navigation ×1
cart ×1
cordova ×1
fragment ×1
lifecycle ×1