2015-05-15 174 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'行並且像往常一樣打開片段:) –