2015-05-15 122 views
0

我在使用我的简单应用程序时遇到了一些麻烦。该应用程序从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方法只是返回null,应用程序崩溃,当我尝试找回照片。但有时它可以正常工作。我有点失落,为什么这是。是否因为在DisplayImageActivity中分配了imgPath变量之前有时构造了片段,因此该变量仅为null?

我有点新来android,所以这可能不是最好的方法。我只是从头顶上做的。任何想法为什么发生这种情况?

+0

如何将您的字符串存储在共享首选项中 –

回答

0

如果你想从一个活动的片段传递数据,你可以使用这种方法:

在活动:

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?

+0

因此,transaction.replace部分替换当前片段实例或什么?我会试试看看它是如何工作的! – St0ffer

+0

这个事务是一个动画,可以在视图中打开你的片段,也就是使用ID片段__single,但是你可以跳过'transaction'行并且像往常一样打开片段:) –