2016-09-30 61 views
1

我已經實現了一個自定義的DialogFragment,我在我的postReviewFragment的RatingBar評級監聽器事件中顯示它,我想在對話被解除時將我的RatingBar評級設置回0用戶。如何聆聽DialogFragment解僱事件

搜索,所以我已經遇到這些線程,但解決方案似乎並沒有爲我工作:

DialogFragment Close Event

Can't use onDismiss() when using custom dialogs

DialogFragment and onDismiss

我已經試過到目前爲止使用以上線程:

實施DialogInterface.OnDismissListener o n個postReviewFragment和壓倒一切的onDismiss()方法

@Override 
    public void onDismiss(final DialogInterface dialog) { 

     userRating.setRating(0); 

    } 

此外,在我有此改變onDismiss()方法DialogFragment

@Override 
public void onDismiss(DialogInterface dialog) { 
    super.onDismiss(dialog); 
    final Fragment parentFragment = getParentFragment(); 
    if (parentFragment instanceof DialogInterface.OnDismissListener) { 
     ((DialogInterface.OnDismissListener) parentFragment).onDismiss(dialog); 
    } 
} 

但仍是onDismiss()方法不火起來的時候dialogFragment被駁回,我是什麼做錯了?

回答

0

OK,我設法弄明白:

所有的
  1. 首先確保你已經實現DialogInterface.OnDismissListener和重寫onDismiss兩個DialogFragment和片段顯示的對話框()方法。

  2. 然後當你展示DialogFragment設定的目標片段,在這裏我通過一個Bundle通過評級的DialogFragment

    android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager(); 
          PostReviewDialogFragment dialog = new PostReviewDialogFragment(); 
    
          // optionally pass arguments to the dialog fragment 
          Bundle args = new Bundle(); 
          args.putInt("usersRating", rating); 
          dialog.setArguments(args); 
    
          dialog.setTargetFragment(RestaurantReviewFragment.this,REVIEW_FRAGMENT); 
    
    
          dialog.show(fm, TAG); 
    
  3. 在DialogFraments的onDismiss()方法我的等級設置爲0,並將其添加到意圖額外並將dialogFragment中的ratingbar設置爲用戶選擇的值。

    Intent i = new Intent() 
         .putExtra("rating1", rating); 
    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i); 
    
  4. 然後我重寫onActivityResult()方法駁回時讀取該片段的值和設置的RatingBar值設置爲0。

這可能不是最好的方法,但它的工作原理,我會更新答案,如果我發現比這種方法更好。如果我的解釋不是很清楚,請道歉,以下是更詳細的解釋。

參考文獻:How to send data from DialogFragment to a Fragment?

0

試試這個。

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
        public void onDismiss(DialogInterface dialog) { 
         MainActivity.this.finish(); 
        } 
       });