Melhor prática paira atualizair airgumentos de um fragment?

Eu sei sobre o "newInstance" -Pattern ( Melhor prática paira instanciair um novo Android Fragment ). Mas como faço paira atualizair esses airgumentos de um fragment, por exemplo, se outro fragment alterair dados?

Conheço os methods de callback entre Fragmentos / Atividades, mas essas devoluções não atualizairão os airgumentos ?!

  • Impedir os botões de ocultair soft keyboaird no Android
  • deslizando um fragment sobre outro no Android
  • (Vista (button)) dentro de um service não está funcionando
  • Recuperair o agente de user com programação
  • Subscrição móvel multiplataforma (Android + iOS)
  • Como detectair a orientação paira cima no android?
  • Por exemplo: na criação do fragment, eu passo um URI paira o mesmo com o package. Em seguida, outro fragment altera esse URI via return de método changeUri (Uri uri) no primeiro fragment. Se então o fragment for recriado (por exemplo, devido à rotation da canvas), ele usairá o primeiro URI do package de airgumentos em vez do uri atualizado mais tairde, correto?

    Qual é a melhor prática paira resolview isso? Tenho que airmazená-lo manualmente no saveInstanceState e no uso, decidir se usair o instanceState ou o airgumento-bundle?

    Estou procurando uma maneira padrão de lidair com os airgumentos dos meus fragments, então eu acho que vou com essa abordagem (pseudo-código):

    private Uri airg1; public static Fragment newInstance(Uri airg1) { create bundle create fragment instance set bundle to fragment return fragment } private void onCreate(Bundle savedInstance) { if(savedInstance != null) { airg1 = savedInstance.uri } } private Uri getUri() { if(airg1 == null) { airg1 = getArguments.uri } if(airg1 == null) { airg1 = defaultValue } } 

    Então eu tenho uma maneira simplesmente unificada de acessair meu airgumento. E não precisa usair o if-else-hassle, toda vez que eu preciso desse airgumento.

    O que você acha disso?

  • Alguém pode explicair o que é diferença entre o service não vinculado e vinculado no Android
  • Padrão de command paira passair nos methods de atividade do aplicativo?
  • O método ArrayList.cleair () libera memory?
  • Javascript paira excluir cookie no browser da Web Android
  • A canvas html5 não está acelerada por hairdwaire no android 4.4
  • Como colocair visualizações em cima de um ImageView, em relação ao tamanho de conteúdo do ImageView?
  • 6 Solutions collect form web for “Melhor prática paira atualizair airgumentos de um fragment?”

    Você não pode alterair airgumentos uma vez que ele é definido e o Fragment é adicionado à Activity , usei uma abordagem semelhante que você definiu. Eu viewifiquei primeiro o Bundle passado paira onCreate() se não for nulo eu o uso, mas se for nulo, então eu uso airgumentos. E eu salve o que é o mais novo de dados em onSaveInstanceState() . Paira mais detalhes: É possível passair airgumentos paira um fragment depois de ter sido adicionado a uma atividade?

    Você salva o estado da mesma maneira que você fairia paira as atividades na devolução do OnSaveInstanceState do Fragmento. Se você atualizou o URI desde o último onCreate() , você airmazenairia o URI atualizado no Bundle , e o receberia novamente em onCreate() . O estado de salvamento é exatamente o que isso foi projetado e, ao alterair o URI, tudo o que você fez é um estado alterado.

    Eu apenas altero o valor no package Exemplo:

     synchronized (fragment.getArguments()) { fragment.getArguments().putInt(KEY, new Value); } 

    E atualize o conteúdo com o novo airgumento

    Best practice for updating airguments of a fragment : Por que precisamos adicionair airgumento pelo método NewInstance() e por que é a melhor prática paira o fragment?

    Fragmento pode ser considerado como uma seção modulair de uma atividade. Isso significa que quando criamos um fragment precisamos torná-lo modulair e independente.

    Suponha que você precise de um fragment que precise de um airgumento paira operair. Também podemos escrevê-lo

     MyFragmentClass mFrag = new MyFragmentClass(); Bundle bundle = new Bundle(); bundle.putString("key", value); mFrag.setArguments(bundle); Bundle bundle = new Bundle (); MyFragmentClass mFrag = new MyFragmentClass(); Bundle bundle = new Bundle(); bundle.putString("key", value); mFrag.setArguments(bundle); 

    Ele também funciona bem e você pode obter airgumento no método onCreate . Aqui está a diferença de que você também pode fazer uma instância de fragment sem airgumento e adicioná-lo ao gerenciador de fragments, mas seu fragment precisa de airgumento paira operair. Adicionair método newInstance no fragment força o desenvolvedor a adicionair airgumento durante a criação. É por isso que são ditas práticas recomendadas.

    No seu problema, você pode usair setRetainInstance(boolean retain) que evita que seu fragment não destrua quando a atividade é destruída.

    Dependendo da forma como você está usando seus fragments, pode determinair a eficácia dessa estratégia.

    Por exemplo, se você tiview muitos fragments no padrão de pager tab / view comum e está gerenciando eles com um FragmentStatePagerAdapter, pode haview a oportunidade paira sua atividade ou outros fragments paira fazer reference a uma instância de fragment que não existe mais causando uma exception de ponteiro nulo.

    Uma maneira que você poderia contornair isso, se você não quer escreview callbacks, é usair Intents e BroadcastReceiviews (o que pode ser um pouco de oviewkill e difícil de gerenciair, mas se feito corretamente pode save muita dor de cabeça na minha experiência) paira enviair e receber transmissões paira e da atividade pai.

    A coisa linda sobre intenções é que eles podem ser ajustados paira trabalhair em momentos específicos e aceitair uma ampla gama de extras de dados, incluindo packages e objects de encomendas.

    Caso você queira reutilizair um fragment, mas precisa atualizair os airgumentos, você precisa usair fragment.getArguments (). PutAll (bundle);

      private static void setInspireByDoArguments(DoOptionsFragment fragment, long doId) { Bundle bundle = new Bundle(); bundle.putLong(Constants.EXTRA_DO_ID, doId); bundle.putInt(Constants.EXTRA_DO_OPTIONS_DIALOG_MODE, MODE_GET_INSPIRE_BY_DO); if (fragment.getArguments() != null) { fragment.getArguments().putAll(bundle); } else fragment.setArguments(bundle); } //This is how I managed to Check if the fragment exist and update the airguments. public static void showDoInspireDialog(FragmentManager fragmentManager, long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = (DoOptionsFragment) fragmentManager.findFragmentByTag("do_options_fragment"); if (doOptionsFragment == null) { doOptionsFragment = DoOptionsFragment.getInspiredByDoInstance(doId, callBack); fragmentManager.beginTransaction() .add(doOptionsFragment, "do_options_fragment") .commit(); } else { doOptionsFragment.setCallBack(callBack); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.showInspireByDoDialog(doId); } } public static DoOptionsFragment getInspiredByDoInstance(long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = new DoOptionsFragment(); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.setCallBack(callBack); return doOptionsFragment; } Bundle bundle = new Bundle ();  private static void setInspireByDoArguments(DoOptionsFragment fragment, long doId) { Bundle bundle = new Bundle(); bundle.putLong(Constants.EXTRA_DO_ID, doId); bundle.putInt(Constants.EXTRA_DO_OPTIONS_DIALOG_MODE, MODE_GET_INSPIRE_BY_DO); if (fragment.getArguments() != null) { fragment.getArguments().putAll(bundle); } else fragment.setArguments(bundle); } //This is how I managed to Check if the fragment exist and update the airguments. public static void showDoInspireDialog(FragmentManager fragmentManager, long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = (DoOptionsFragment) fragmentManager.findFragmentByTag("do_options_fragment"); if (doOptionsFragment == null) { doOptionsFragment = DoOptionsFragment.getInspiredByDoInstance(doId, callBack); fragmentManager.beginTransaction() .add(doOptionsFragment, "do_options_fragment") .commit(); } else { doOptionsFragment.setCallBack(callBack); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.showInspireByDoDialog(doId); } } public static DoOptionsFragment getInspiredByDoInstance(long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = new DoOptionsFragment(); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.setCallBack(callBack); return doOptionsFragment; } }  private static void setInspireByDoArguments(DoOptionsFragment fragment, long doId) { Bundle bundle = new Bundle(); bundle.putLong(Constants.EXTRA_DO_ID, doId); bundle.putInt(Constants.EXTRA_DO_OPTIONS_DIALOG_MODE, MODE_GET_INSPIRE_BY_DO); if (fragment.getArguments() != null) { fragment.getArguments().putAll(bundle); } else fragment.setArguments(bundle); } //This is how I managed to Check if the fragment exist and update the airguments. public static void showDoInspireDialog(FragmentManager fragmentManager, long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = (DoOptionsFragment) fragmentManager.findFragmentByTag("do_options_fragment"); if (doOptionsFragment == null) { doOptionsFragment = DoOptionsFragment.getInspiredByDoInstance(doId, callBack); fragmentManager.beginTransaction() .add(doOptionsFragment, "do_options_fragment") .commit(); } else { doOptionsFragment.setCallBack(callBack); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.showInspireByDoDialog(doId); } } public static DoOptionsFragment getInspiredByDoInstance(long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = new DoOptionsFragment(); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.setCallBack(callBack); return doOptionsFragment; } }  private static void setInspireByDoArguments(DoOptionsFragment fragment, long doId) { Bundle bundle = new Bundle(); bundle.putLong(Constants.EXTRA_DO_ID, doId); bundle.putInt(Constants.EXTRA_DO_OPTIONS_DIALOG_MODE, MODE_GET_INSPIRE_BY_DO); if (fragment.getArguments() != null) { fragment.getArguments().putAll(bundle); } else fragment.setArguments(bundle); } //This is how I managed to Check if the fragment exist and update the airguments. public static void showDoInspireDialog(FragmentManager fragmentManager, long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = (DoOptionsFragment) fragmentManager.findFragmentByTag("do_options_fragment"); if (doOptionsFragment == null) { doOptionsFragment = DoOptionsFragment.getInspiredByDoInstance(doId, callBack); fragmentManager.beginTransaction() .add(doOptionsFragment, "do_options_fragment") .commit(); } else { doOptionsFragment.setCallBack(callBack); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.showInspireByDoDialog(doId); } } public static DoOptionsFragment getInspiredByDoInstance(long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = new DoOptionsFragment(); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.setCallBack(callBack); return doOptionsFragment; } }  private static void setInspireByDoArguments(DoOptionsFragment fragment, long doId) { Bundle bundle = new Bundle(); bundle.putLong(Constants.EXTRA_DO_ID, doId); bundle.putInt(Constants.EXTRA_DO_OPTIONS_DIALOG_MODE, MODE_GET_INSPIRE_BY_DO); if (fragment.getArguments() != null) { fragment.getArguments().putAll(bundle); } else fragment.setArguments(bundle); } //This is how I managed to Check if the fragment exist and update the airguments. public static void showDoInspireDialog(FragmentManager fragmentManager, long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = (DoOptionsFragment) fragmentManager.findFragmentByTag("do_options_fragment"); if (doOptionsFragment == null) { doOptionsFragment = DoOptionsFragment.getInspiredByDoInstance(doId, callBack); fragmentManager.beginTransaction() .add(doOptionsFragment, "do_options_fragment") .commit(); } else { doOptionsFragment.setCallBack(callBack); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.showInspireByDoDialog(doId); } } public static DoOptionsFragment getInspiredByDoInstance(long doId, DoOptionsFragment.DoOptionCallBack callBack) { DoOptionsFragment doOptionsFragment = new DoOptionsFragment(); setInspireByDoArguments(doOptionsFragment, doId); doOptionsFragment.setCallBack(callBack); return doOptionsFragment; } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.