gpt4 book ai didi

android - 将字符串从 Activity 传递回 Android 中运行的 Fragment

转载 作者:行者123 更新时间:2023-11-29 01:07:29 25 4
gpt4 key购买 nike

有一些关于类似问题的帖子,但我没有得到正确的答案,我希望任何人都可以帮助我。

情况:我有一个包含多个 fragment 的 MainActivity。在一个 fragment 中,我启动了一个带有 Intent 的 CameraActivity。当用户拍照后,CameraActivity 将使用 finish() 关闭,我们返回到之前的 Fragment。

目标:我给图片起了一个特定的名字,并想将这个名字从 CameraActivity 传递给 fragment 。

问题:即使我在 CameraActivity 中调用 finish() 并且屏幕返回到前一个 Fragment,方法 onSaveInstanceState(Bundle outstate) 也从未被调用。这是为什么?

否则我该如何解决问题?

这是我的代码:

public class CameraActivity extends Activity {
// more code here

String imageFileName;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// some methods here
finish(); // finish the current Activity and get back to previous Fragment
}

// more code here

@Override
protected void onSaveInstanceState(Bundle outState) {
Log.d(TAG_LOG, "onSaveInstanceState() called"); // is never called!
outState.putString("imageFileName", imageFileName);
super.onSaveInstanceState(outState);
}
}

在 fragment 中我这样做:

public class MapFragment extends Fragment implements View.OnClickListener {

// more code here

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_map, container, false);
// some methods here

if (savedInstanceState != null) {
String imageFileName = getArguments().getString("imageFileName");
Log.d(TAG_LOG, "image filename: " + imageFileName);
}

return view;
}

// more code here
}

非常感谢任何帮助!

最佳答案

您应该看一下 startActivityForResults。这是一个简短的例子(还没有尝试过,但你会明白的):

fragment

Intent intent = new Intent(MainActivity.this,CameraActivity.class);
getActivity().startActivityForResult(intent,RESULT_PIC_TAKEN); // you may start an activity from another activity, not a fragment

相机 Activity

Intent results = new Intent();
results.putExtra("com;yourpackage.PIC_NAME", picName);
setResult(CameraActivity.RESULT_OK,results);
finish();

返回 MainActivity(因为您调用了 getActivity())

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

if (requestCode == RESULT_PIC_TAKEN) {
if(resultCode == Activity.RESULT_OK){
Bundle results = data.getExtras();
String picName = results.getString("com.yourpackage.PIC_NAME");
// code, and send what you want to the fragment
}
}
}

希望对您有所帮助!

关于android - 将字符串从 Activity 传递回 Android 中运行的 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com