Mr *_*war 164 android android-fragmentactivity
FirstActivity.Java有一个FragmentA.Java电话startActivityForResult().
SecondActivity.Java打电话,finish()但onActivityResult永远不会被写入FragmentA.Java.
FragmentA.Java 码:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// some code
Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
getActivity().startActivityForResult(i, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
getActivity();
if(requestCode == 1 && resultCode == Activity.RESULT_OK) {
//some code
}
}
Run Code Online (Sandbox Code Playgroud)
SecondActivity.Java 码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some code
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
Run Code Online (Sandbox Code Playgroud)
我试过调试代码,但onAcitvityResult()永远不会被调用.
Kev*_*ara 251
你必须写onActivityResult()在你的FirstActivity.Java如下
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
所以这将调用你的片段 onActivityResult()
编辑:解决方案是替换getActivity().startActivityForResult(i, 1);为startActivityForResult(i, 1);
Ami*_*tel 32
凯文的答案有效,但是使用该解决方案很难使用数据.
最佳解决方案是不要从startActivityForResult()活动水平开始.
在你的情况下不要打电话 getActivity().startActivityForResult(i, 1);
相反,只需使用startActivityForResult()它将完美无缺!:)
Rah*_*kar 26
您必须在FirstActivity.Java中编写onActivityResult(),如下所示
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
Run Code Online (Sandbox Code Playgroud)
这将在FirstActivity.java上触发片段的onActivityResult方法
最重要的是,这里缺少的都是... FirstActivity的launchMode必须为singleTop。如果是singleInstance,则在调用startActivityForResult方法之后立即调用FragmentA中的onActivityResult。因此,它不会等待在SecondActivity中调用finish()方法。
因此,请按照以下步骤进行操作,经过长时间的研究,它肯定会对我有用。
在AndroidManifest.xml文件中,将FirstActivity.Java的launchMode设置为singleTop。
<activity
android:name=".FirstActivity"
android:label="@string/title_activity_main"
android:launchMode="singleTop"
android:theme="@style/AppTheme.NoActionBar" />
Run Code Online (Sandbox Code Playgroud)
在FirstActivity.java中,重写onActivityResult方法。因为这将调用FragmentA的onActivityResult。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
在FragmentA.Java中,重写onActivityResult方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("FragmentA.java","onActivityResult called");
}
Run Code Online (Sandbox Code Playgroud)
startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);从FragmentA.Java 调用
finish();SecondActivity.java中的调用方法
希望这会起作用。
小智 5
我们可以startActivityForResult()直接从Fragment 致电,因此您应该致电this.startActivityForResult(i, 1);而不是getActivity().startActivityForResult(i, 1);
Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
this.startActivityForResult(i, 1);
Run Code Online (Sandbox Code Playgroud)
活动会将活动结果发送到您的片段。
| 归档时间: |
|
| 查看次数: |
120235 次 |
| 最近记录: |