西安关键字优化哪家好,seo搜索优化工程师招聘,做的比较好的美食网站有哪些,htm5网站建设android中经常会遇到从当前的Activity跳转到另外一个Activity的情况#xff0c;通常情况下我们会直接选择用startActivity或者startActivityForResult。如果你对这两个方法还不知道的话可以去https://www.cnblogs.com/fuck1/p/5456337.html看看。本文不会告诉你怎么使用这个方…android中经常会遇到从当前的Activity跳转到另外一个Activity的情况通常情况下我们会直接选择用startActivity或者startActivityForResult。如果你对这两个方法还不知道的话可以去https://www.cnblogs.com/fuck1/p/5456337.html看看。本文不会告诉你怎么使用这个方法而是会说说笔者自己遇到的问题以及解决办法。 事情的起因是我在项目中遇到这样一个问题就是要求从下一个界面传数据回来当时第一反应是用startActivityForResult解决当我把代码敲完过后一测试我擦咧结果没回来。我以为是我代码写错了这段代码很简单怎么可能会错最后找到答案是因为Activity的启动模式被这只成了singleTask。好吧这个有点坑自己了。于是我就自己测试了四种不同模式下启动模式对该方法的影响如果你对Activity的四种启动模式还不是很了解可以到https://blog.csdn.net/qq994467433/article/details/83350698看看结果还真的挺有意思的。话不多说上代码。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button standardButton, singleTopButton, singleTaskButton, singleInstanceButton;private static final String TAG MainActivity;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);standardButton findViewById(R.id.standard_activity);standardButton.setOnClickListener(this);singleTopButton findViewById(R.id.single_top_activity);singleTopButton.setOnClickListener(this);singleTaskButton findViewById(R.id.single_task_activity);singleTaskButton.setOnClickListener(this);singleInstanceButton findViewById(R.id.single_instance_activity);singleInstanceButton.setOnClickListener(this);}Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.standard_activity:Intent firstIntent new Intent(MainActivity.this, StandardActivity.class);startActivityForResult(firstIntent, 1);break;case R.id.single_top_activity:Intent secondIntent new Intent(MainActivity.this, SingleTopActivity.class);startActivityForResult(secondIntent, 2);break;case R.id.single_task_activity:Intent thirdIntent new Intent(MainActivity.this, SingleTaskActivity.class);startActivityForResult(thirdIntent, 3);break;case R.id.single_instance_activity:Intent fourthIntent new Intent(MainActivity.this, SingleInstanceActivity.class);startActivityForResult(fourthIntent, 4);break;}}Overrideprotected void onActivityResult(int requestCode, int resultCode, Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case 1:if (resultCode RESULT_OK){int standardActivityData data.getIntExtra(StandardActivity,0);Log.e(TAG, standardActivityData standardActivityData );}break;case 2:if (resultCode RESULT_OK){int singleTopActivityData data.getIntExtra(SingleTopActivity,0);Log.e(TAG, singleTopActivityData singleTopActivityData );}break;case 3:if (resultCode RESULT_OK){int singleTaskActivityData data.getIntExtra(SingleTaskActivity,0);Log.e(TAG, singleTaskActivityData singleTaskActivityData );}break;case 4:if (resultCode RESULT_OK){int singleInstanceActivityData data.getIntExtra(SingleInstanceActivity,0);Log.e(TAG, singleInstanceActivityData singleInstanceActivityData );}break;}}
}
这里我在MainActivity里面放置了四个按钮用于启动四种不同模式下的Activity并在每个对应的Activity里面放置按钮来回传结果。并在onActivityResult方法中分别获取来自不同的Activity回传的数据。其中默认模式下的Activity代码如下
public class StandardActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_standard);findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {Intent intent new Intent();intent.putExtra(StandardActivity,111111);setResult(RESULT_OK,intent);finish();}});}
}其余Activity的类似。我们分别来看看结果吧。 1.standard模式下的数据
10-25 18:52:20.788 10014-10014/com.example.gzw.activitydemo E/MainActivity: standardActivityData111111可以看到这时候的数据是有传回来的。 2.singTop模式下的数据
10-25 18:53:57.838 10014-10014/com.example.gzw.activitydemo E/MainActivity: singleTopActivityData222222是的也有数据产生 3.singleInstance模式下 这个就厉害了没有数据传回来。这个原理是什么我也不是很清楚先当结论记住吧 4.singleTask模式下 由于singleTask模式有可能会涉及到栈的变化所以我分别测试了下。一是指定taskAffinity在这个情况下数据是没有回传的 第二次我没有指定taskAffinity这次数据还是没有回来。。。 总结要想让startActivityForResult收到回传数据那对应的Activity只能是standard或者singTop模式。 最后Demo的源码下载地址https://download.csdn.net/download/qq994467433/10744616