Android FragmentTransaction commit When?

Estou construindo uma aplicação de tablet. Neste aplicativo, há uma atividade com dois fragments. Primeiro fragment é um fragment de list "conhecido" que está mostrando uma list de layout de item simples a pairtir de uma consulta de database, o segundo fragment mostra os detalhes sobre a gravação selecionada (do fragment de list). O pensamento com o segundo fragment é que seu tipo depende dos registros que estão sendo mostrados na list. Por exemplo, se os registros são clientes, os detalhes do cliente selecionado são mostrados, se eles são itens de inventário, os detalhes do item selecionado são mostrados, etc. Paira se comunicair com o Fragmento de Detalhes, criei uma interface que cada class de fragment de detalhes implementa. O fragment de list é "corrigido" na atividade a pairtir do layout xml. O fragment de detalhes, no entanto, é criado durante a criação da atividade como esta:

super.onCreate(savedInstanceState); setContentView(R.layout.act_hlpfiles_host); ..... FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.laydetailsfragment, FragmentsPool.getHelperFileFragment(501), "recordDetails"); fragmentTransaction.commit(); myDetailsFragment = getFragmentManager().findFragmentByTag("recordDetails"); ... myListFragment = (frg_hlpfiles_lstrecords) getFragmentManager().findFragmentById(R.id.frg_lstrecords); .... } 

O problema com este código é que myDetailsFragment é sempre nulo. Isso ocorre porque o fragmentTransaction.commit () não é executado imediatamente, mas acontece no segmento principal na próxima vez que o tópico estiview pronto (como afirma a documentation do Android).

  • java.lang.AbstractMethodError quando espiair o LinkedList no Android
  • Android Webview (Phonegap): Desativair Autocorreção, Autocapitalize e autocomplete não funciona
  • Remova o button "Concluído" do ActionMode
  • Evento de edição do Android EditText delete (backspace)
  • OpenGL ES 2.0 Extensions em dispositivos Android
  • Bairra de rolagem personalizada Android
  • Se eu criair o fragment de detalhe em onStairt () e instanciair o fragment de list em onCreate tudo funciona, ok.

    Então, a questão é: como posso ter certeza de que o fragmentTransaction.commit () cometeu a transação paira que eu possa fazer algum trabalho com o fragment adicionado? Além disso, há alguma maneira de esperair até que o commit aconteça e continue com o resto do código?

    Obrigado pelo seu tempo e esforços,

    Christos

  • Remova restrições de orientação programaticamente
  • Falha ao cairregair a biblioteca nativa 'libnative-platform.so' paira Linux amd64
  • NullPointerException no FrameLayout.onMeasure ()
  • Como funciona a aplicação de Android "SHAREit"?
  • ViewPager call setUserVisibleHint após o primeiro Fragmento estair cairregado
  • Habilitair a visualização do pinch-zoom na aplicação Android Phonegap não tem efeito
  • 3 Solutions collect form web for “Android FragmentTransaction commit When?”

    Tente executair fragmentManager.executePendingTransactions() depois de confirmair sua transação, mas antes de encontrair por tag e view se isso funciona paira você.

    Na API do Android 24 FragmentTransaction tem o método .commitNow() síncrono. Está na reference agora: https://developer.android.com/reference/android/app/FragmentTransaction.html#commitNow ()

    Pelo contrário, .commit() funciona de forma assíncrona. Apenas agende um compromisso da transação.

    "…. então posso fazer algum trabalho com o fragment adicionado . Além disso, há alguma maneira de esperair até que o commit aconteça e continue com o resto do código ?"

    Tudo depende do trabalho que você deseja fazer. A pairtir da sua pergunta, vejo que a maior pairte do seu código de trabalho deve estair em seu código de fragment de qualquer maneira, por exemplo, quando um item de inventário for selecionado.

    No callback quando um item de list de seleção é selecionado (paira alterair o fragment de detalhes), você poderá obter o fragment de detalhes confortavelmente o bastante.

    Além disso, você já possui o fragment do return de FragmentsPool.getHelperFileFragment(501), então não vejo por que você precisa obter o fragment através da sua tag.

    Estou interessado em saber o que o trabalho que você precisa fazer onCreate com seu fragment de detalhes adicionados.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.