我的简单应用程序遇到了一些麻烦。该应用程序从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)
如果要将数据从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?