将字符串发送到Activity,然后发送到活动片段

时间:2015-05-15 14:35:54

标签: java android android-fragments

我的简单应用程序遇到了一些麻烦。该应用程序从MainActivity开始,您可以按下相机图标。这打开了拍摄照片的隐含意图。拍摄照片时,会打开另一个活动DisplayImageActivity。此活动由两个片段组成:一个包含用于显示照片的ImageView,另一个包含一些TextView,用于显示有关照片的一些信息(文件名,大小,位置等)。我使用ViewPager来获得水平滑动功能。

现在问题。我应该注意,这不是一个一致的问题。有时应用程序崩溃,有时它工作得很好。问题在于从MainActivity中的onActivityResult获取图像路径到两个片段,这样我就可以得到图像和信息。这是我的onActivityResult方法:

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

    if (requestCode == 42 && resultCode == RESULT_OK) {
        Log.d(TAG, "MainActivity onActivityResult method called.");

        Intent intentShowPicture = new Intent(this, DisplayImageActivity.class);

        intentShowPicture.putExtra(PICTURE_KEY, imgPath);

        startActivity(intentShowPicture);
    }
}

所以我只是把我拍摄的图像路径放在束中并启动DisplayImageActivity。然后在我的DisplayImageActivity中,我这样做:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_image);
    Log.d(MainActivity.TAG, "DisplayImageActivity onCreate called.");

    imgPath = getIntent().getExtras().getString(MainActivity.PICTURE_KEY);

    mAdapter = new FragmentAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mAdapter);

然后我有一个方法只返回straing imgPath:

public String getImgPath() {
    return imgPath;
}

然后在片段(PictureFragment)中我尝试像这样检索imgPath:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    DisplayImageActivity activity = (DisplayImageActivity) getActivity();
    imgPath = activity.getImgPath();

但正如我之前提到的,有时getImgPath方法只返回n​​ull,当我尝试检索照片时应用程序崩溃。但有时它工作正常。我很遗憾为什么会这样。是因为片段有时是在DisplayImageActivity中分配imgPath变量之前构造的,所以变量只是null?

我对android有点新手,所以这可能不是最好的方法。我只是从头顶做到了。任何想法为什么会这样?

1 个答案:

答案 0 :(得分:0)

如果要将数据从Activity传递到Fragment,可以使用以下方法:

在活动中:

    Bundle bundle = new Bundle();
    String imgPath = "path/to/my/image";
    bundle.putString("imgPath", imgPath );
    PictureFragment frag = new PictureFragment();
    frag.setArguments(bundle);
    transaction.replace(R.id.fragment_single, frag);
    transaction.commit();

片段:

读取片段中的值

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        String myValue = this.getArguments().getString("imgPath");
        ...
        ...
        ...
    }

有关详细信息,请查看此问题How to pass a variable from Activity to Fragment, and pass it back?