2015-12-11 2 views
1

Я хочу показать AlertDialog (с несколькими кнопками кнопки Radio Button и кнопкой OK), как только будет создан фрагмент.Как показать AlertDialog, как только созданный фрагмент

Где лучше всего назвать фрагмент диалога? Я попытался в onViewCreated() и onResume(), и оба работают, но я не уверен, что лучше всего.

Кроме того, чтобы гарантировать, что диалог не отображается каждый раз, когда фрагмент останавливается/воссоздается из-за, например, для вращения экрана, я создал логическое значение, называемое mShowDialog, и установил его в «true» в onCreate(), затем использовал оператор «If», чтобы решить, следует ли показывать диалог (см. ниже, например).

onCreate(){ 
    //.... 
    mShowDialog = true; 
} 

onResume(){ 
    if (mShowDialog){ 
     //....show dialog code 
     // set mShowDialog to false to ensure code executed only once 
     mShowDialog = false; 
    } 
} 

Является ли приведенный выше код лучшим способом выполнения обоих требований?

Btw, я довольно новичок в программировании.

Заранее благодарим за помощь.

ответ

1

Лучшая практика для этого - раздуть диалог в onCreateView() метод фрагмента.

0

Если вы пытаетесь создать его из действия, добавляющего фрагмент, мне повезло с добавлением FragmentListener к моим фрагментам и установкой его из активности. Это мой основной BaseFragment класса, что все мои фрагменты удлиняют:

public class BaseFragment extends Fragment { 

    public Context context; 
    public Activity activity; 

    public FragmentListener fragmentListener; 

    private boolean attached = false; 

    public BaseFragment() { 

    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     if (!isAttached()) { 
      this.context = activity; 
      this.activity = activity; 

      if (this.fragmentListener != null) { 
       this.fragmentListener.onAttached(); 
      } 

      setAttached(true); 
     } 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 

     if (!isAttached()) { 
      this.context = context; 
      this.activity = (Activity) context; 

      if (this.fragmentListener != null) { 
       this.fragmentListener.onAttached(); 
      } 

      setAttached(true); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 

     setAttached(false); 
     if (this.fragmentListener != null){ 
      this.fragmentListener.onDetached(); 
     } 
    } 

    public void setFragmentListener(FragmentListener fragmentListener) { 
     this.fragmentListener = fragmentListener; 
    } 

    public View.OnClickListener onBackTapped = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getActivity().onBackPressed(); 
     } 
    }; 

    public boolean isAttached() { 
     return attached; 
    } 

    public void setAttached(boolean attached) { 
     this.attached = attached; 
    } 

    public boolean isPermissionGranted(String permission){ 
     return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; 
    } 

    public boolean ifShouldShowRationaleForPermission(String permission){ 
     return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission); 
    } 

    public void showPermissionRequest(Activity activity, int requestCode, String... permissions){ 
     ActivityCompat.requestPermissions(activity, permissions, requestCode); 
    } 
} 

Таким образом, я могу сделать это в своей деятельности:

MyFragment myFragment = new MyFragment(); 
myfragment.setFragmentListener(new FragmentListener() { 
    @Override 
    public void onAttached() { 
     // Stuff I want to do when it is attached 
    } 

    @Override 
    public void onDetached() { 
     // Stuff I want to do when it is detached 
    } 
}); 

fragmentManager.beginTransaction() 
     .add(R.id.container, myFragment) 
     .commit(); 

И тогда я могу добавить любой код, который я хочу, когда фрагмент делает это разные вещи.

Удачи вам!

Смежные вопросы