2

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

情况: 我有一个MainActivity包含几个片段。在一个片段中,我CameraActivity有一个意图。当用户拍完照片后,我们CameraActivity会关闭finish()并返回到之前的 Fragment。

目标: 我给图片一个特定的名称,并希望将这个名称从图片传递CameraActivity给片段。

问题: 即使我调用finish()CameraActivity并且屏幕返回到之前的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);
    }
}

在片段中我这样做:

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
}

非常感谢任何帮助!

4

2 回答 2

1

你应该看看startActivityForResults。这是一个简短的示例(尚未尝试过,但您会明白的):

分段

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

相机活动

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
        }
    }
}

希望对你有帮助!

于 2017-08-23T15:50:55.743 回答
0

使用startActivityForResult()启动 CameraActivity ,一旦您将字符串传回上一个屏幕,只需创建一个包含该字符串的 Intent ,并在您的 MainActivity 中实现:

protected void onActivityResult(int requestCode, int resultCode, Intent data)

从意图中获取字符串,并将其传递给您的片段。

onSaveInstanceState用于其他目的。

于 2017-08-23T15:48:45.750 回答