0

我在Activity中有一個自定義DialogFragment作爲內部class。自定義DialogFragment包含2個Buttons。 第一個Button打開Camera,第二個打開Gallery。按下Image後顯示DialogFragment。 直到這裏一切都很好。Android DialogFragment不會在Button OnClickListener回調中被取消

現在我想添加一項新功能。當第一次打開Activity時,我想自動打開Camera,這意味着我要「按」我的DialogFragment的第一個Button

在我的ActivityonCreate方法我只是顯示DialogFragment並執行第一個點擊Button。問題是DialogFragment沒有被解僱。

這裏是我的代碼:

public static class MyDialogFragment extends DialogFragment { 
    Button openCameraButton; 
    Button openGalleryButton; 
    boolean openCameraAutomatically; 

    public static MyDialogFragment newInstance(boolean openCameraAutomatically) { 
     MyDialogFragment f = new MyDialogFragment(); 
     Bundle args = new Bundle(); 
     args.putBoolean("open_camera", openCameraAutomatically); 
     f.setArguments(args); 
     return f; 
    } 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     openCameraAutomatically = getArguments().getBoolean("open_camera"); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.my_dialog, container, false); 
     getDialog().setTitle("title"); 

     openCameraButton = (Button) rootView.findViewById(R.id.open_camera_button); 
     openCameraButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // launch Camera Intent... 
       getDialog().dismiss(); 
      } 
     }); 

     openGalleryButton = (Button) rootView.findViewById(R.id.open_gallery_button); 
     openGalleryButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Launch Gallery Picker Intent 
       getDialog().dismiss(); 

      } 
     }); 


     if(openCameraAutomatically) { 
      openCameraButton.performClick(); 
     } 

     return rootView; 
    } 

} 

這裏是我怎麼稱呼它:

FragmentManager fm = getSupportFragmentManager(); 
MyDialogFragment myDialogFragment = MyDialogFragment.newInstance(); 
myDialogFragment.show(fm, ""); 

getDialog().dismiss();不解僱DialogFragment,後Camera回調(onActivityResult)的DialogFragment是仍然可見。如果我手動按Button(不使用方法performClick),一切正常。

任何想法?

感謝。

回答

0

嘗試只是dismiss()關閉對話框和片段,而不是getDialog().dismiss()它只是消除對話框,但不是片段。

https://developer.android.com/reference/android/app/DialogFragment.html#dismiss()

空隙駁回()

關閉該片段和它的對話框。如果片段被添加到後端堆棧,則將彈出所有後退堆棧狀態直到幷包括該條目。否則,一個新的事務將被提交去除片段。

更新

這裏是另一個想法。在DialogFragment的視圖已準備就緒之前,您正試圖關閉對話框。一旦按鈕可供您推送,即佈局完成,這不是問題。

嘗試在生命週期的後期移動自動解僱。我認爲這會對你有用。

相關問題