2016-02-24 69 views
2

我有我的Android應用程序的以下情況。切換片段和顯示隱藏AlertDialog並保持狀態

  • Step1:Main Activity加載Fragment1
  • 第二步:Fragment1顯示了一些事件AlertDialog如下 Fragment1 with AlertDialog
  • 第三步:對話對右上角CAMRA圖標。當點擊它打開相機拍攝照片如下
 
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

intent.putExtra(MediaStore.EXTRA_OUTPUT, getCapturedImagePath()); 

((Activity)context).startActivityForResult(intent, Constant.CAMERA_CAPTURE); 

((Activity) context).overridePendingTransition(R.anim.right_to_left_layout, R.anim.left_to_right_layout); 
  • 第四步:當合照被捕獲,我們重定向到被稱爲Fragment2中,我們顯示了使用下面的代碼所拍攝的照片的另一個片段。
 
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction(); 

//Hide Fragment1 
fragTrans.hide(fragment1); 

//Add Fragment2 
fragTrans.add(R.id.frame_container, fragment2, fragment2.getClass().getSimpleName()); 

fragTrans.addToBackStack(fragment2.getClass().getSimpleName()); 

fragTrans.commit(); 

它看起來像Fragment2 with AlertDialog

在這裏,我們有一些問題。

問題1:它顯示了Fragment2它實際上在Fragment1Fragment2打開相同AlertDialog加載該對話框後面。 如何隱藏這個對話框?

問題2:Fragment2我們Correct按鈕被點擊時,我們需要用同樣的警告對話框關閉Fragment2並顯示Fragment1或者你可以在它啓動相機之前,相同的狀態說。 我們如何做到這一點?

請指導。

感謝

+0

取消對話相機圖標單擊第一個片段或關閉片段2交易前 –

+0

@BrahmamYamani沒關係。那麼這將解決問題1和關於問題2的任何想法? –

+0

你會在對話框中保留任何數據嗎 –

回答

0

問題1解決方法: - 在從對話攝像機圖標的點擊。

camera.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      dialog.dismiss(); 
      Utils.setDialog(dialog); 

      FragmentTransaction fragTran = getSupportFragmentManager().beginTransaction(); 
      if(activeFragment != null) 
        fragTran.hide(activeFragment); 

      fragTran.add(R.id.frame_container, fragment2, fragment2.getClass().getSimpleName()); 
      fragTran.addToBackStack(fragment2.getClass().getSimpleName()); 
      fragTran.commit(); 
      activeFragment = fragment2; 

    } 
}); 
  • Problem2解決方案: - 從 'Fragment2' '正確' 按鈕的OnClick

    correct.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getSupportFragmentManager().popBackStack(); AlertDialog alertDialog = Utils.getDialog(); if(alertDialog != null) alertDialog.show(); } });

這是從我的工作。

0

對於添加第一塊碎片寫:

fragmentManager.beginTransaction().replace(R.id.relativeLayout, fragment).addToBackStack(fragment1.getClass().getSimpleName()).commit(); 

在片段1個顯示AlertDialog

private void showDialog() { 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setPositiveButton("Camera", null); 
    builder.setNegativeButton("Cancel", null); 
    final AlertDialog alertDialog = builder.create(); 
    alertDialog.setCanceledOnTouchOutside(false); 

    alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { 
     @Override 
     public void onShow(DialogInterface dialog) { 
      Button button_positive = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); 
      Button button_negative = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE); 


      button_negative.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        alertDialog.dismiss(); 
       } 
      }); 

      button_positive.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // Your Camera Call 
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       // intent.putExtra(MediaStore.EXTRA_OUTPUT, "image path"); 
        getActivity().startActivityForResult(intent, "REQUEST_CODE"); getActivity().overridePendingTransition(R.anim.right_to_left_layout, R.anim.left_to_right_layout); 
        //make sure that don't call ==> alertDialog.dismiss(); 
       } 
      }); 

     } 
    }); 
    alertDialog.show(); 

} 

相機呼籲OnActivityresult後:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    //returned from camera 
    // goto next Fragment ==> getActivity().fragmentManager.beginTransaction().replace(R.id.relativeLayout, fragment).addToBackStack(fragment2.getClass().getSimpleName()).commit(); 
    // and for back to fragment 1 call in fragment 2 ==> //getActivity().fragmentManager.popBackStack(fragment2.getClass().getSimpleName()); 
} 

當你到達片段1你有相同的狀態,你在片段

開始希望你能得到解決

+0

// //並且返回片段2中的片段1調用==> // getActivity()。fragmentManager.popBackStack(fragment2.getClass()。getSimpleName());'這裏我認爲它會是'fragment1.getClass ).getSimpleName())。「它是正確的嗎? –

+0

是的,你是對的 –

+0

我試過上述解決方案,然後'問題1'問題仍然存在。另外,我可以獲得'Fragment1'的狀態,但是如果您在快照中觀察到警告對話框,那麼我們有一個用於評論的「EditText」,因此如果我們輸入任何文本。當我們回彈時它不會保留。請指導 –