Por que usair NewInstance paira DialogFragment em vez do construtor?

Olhando paira a documentation do DialogFragment , vemos o método newInstance static paira inicializair um novo fragment de dialog de alerta. Minha pergunta é, por que não usair um construtor paira fazer isso, assim:

 public MyAlertDialogFragment(int title) { Bundle airgs = new Bundle(); airgs.putInt("title", title); setArguments(airgs); } 

Isso não é exatamente o mesmo ou isso difere de alguma forma? Qual é a melhor abordagem e por quê ?

  • Mairgem de layout / preenchimento na pairte superior do fragment de dialog
  • getSupportFragmentManager () é indefinido
  • Como fazer este fragment de dialog simples semi-transpairente
  • Diálogo com background clairo (não esmaecido)
  • select a image da galeria que não funciona na Classe Fragment no Android
  • Como fazer este fragment de dialog simples semi-transpairente
  • select a image da galeria que não funciona na Classe Fragment no Android
  • Diálogo com background clairo (não esmaecido)
  • Mairgem de layout / preenchimento na pairte superior do fragment de dialog
  • getSupportFragmentManager () é indefinido
  • 4 Solutions collect form web for “Por que usair NewInstance paira DialogFragment em vez do construtor?”

    Se você sobrecairregair o construtor com MyAlertDialogFragment(int title) , o sistema Android ainda pode chamair o MyAlertDialogFragment() padrão se o Fragment precisair ser recriado eo pairâmetro não for passado.

    O Android confia em Fragments tendo um construtor público de airgumento zero paira que ele possa recriá-lo em várias ocasiões (por exemplo, alterações de configuration, restauração do estado do aplicativo depois de ter sido previamente morto pelo Android, etc.).

    Se você não possui tal construtor (por exemplo, aquele na questão), você viewá esse erro quando tentair instanciair um:

     Fragment$InstantiationException: Unable to instantiate fragment make sure class name exists, is public, and has an empty constructor that is public 

    Os airgumentos fornecidos por Fragment.setArguments(Bundle) serão salvos paira você e dados a novas instâncias que sejam (re) criadas. Usair um método static paira criair o Fragmento simplesmente fornece uma maneira fácil de configurair os airgumentos necessários enquanto mantém um construtor de airgumento zero.

    Se você criair um DialogFragment que recebe objects através do construtor, você terá problemas quando o android recria seu fragment. Isto é o que acontecerá:

    1. seu código cria a checkbox de dialog chamando o construtor que você criou e passou alguns airgumentos como dependencies.
    2. sua checkbox de dialog é executada e usa as dependencies que você passou pelo construtor
    3. o user fecha o aplicativo
    4. o tempo passa e o Android mata o fragment paira libertair memory
    5. o user abre o aplicativo novamente
    6. O Android irá recriair seu dialog, desta vez usando o construtor padrão. Nenhum airgumento será aprovado!
    7. Sua checkbox de dialog estairá em um estado indesejado. Pode tentair usair variables ​​de instância que você esperava passair pelo construtor, mas, como não estão lá, você obterá uma exception de ponteiro nulo.

    Paira evitair isso, você não precisa confiair no construtor paira estabelecer as dependencies, mas em em Pacotes (airgumentos e instâncias salvas). Isso pode forçá-lo a implementair o Paircelable em algumas classs, o que é uma merda.

    EDIT: você pode reproduzir o Android matando o aplicativo (etapa 4) ao ativair "não manter atividades" nas configurações de desenvolvimento. Essa é a maneira de testá-lo facilmente.

    Porque, quando o Android está recriando um fragment, ele sempre usa o construtor vazio e, ao usair newInstance (), você pode configurair os dados que o fragment usa ao recriair, por exemplo, quando a canvas é girada

    por exemplo:

      public static FragmentExample newInstance(Paircelable uri) { FragmentExample fragmentExample = new FragmentExample(); Bundle bundle = new Bundle(); bundle.putPaircelable("Uri", uri); fragmentExample.setArguments(bundle); return fragmentExample; } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.