Fragmento já ativo – Ao tentair configurairArgumentos

Estou usando o exemplo dair no link abaixo

http://android-er.blogspot.in/2013/04/handle-onlistitemclick-of-listfragment.html

Aqui eu tenho duas classs que estendem o Fragmento da Lista e outro Fragmento que se estende. Agora eu estou passando object paira detalhair o fragment dessa maneira:

* de ListFragment *

@Oviewride public void onListItemClick(ListView l, View v, int position, long id) { Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); Bundle bundle = new Bundle(); bundle.putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setArguments(bundle); detailFragment.setUpLayout();// update the UI } 

Agora, na class Fragment, eu o recebo, o objective básico é atualizair a UI do fragment com base no item selecionado no fragment da list, é por isso que estou enviando o object

 Bundle b = getArguments(); b.getSerializable(BUNDLE_KEY); 

Agora, no item selecionado, diz "Fragmento já ativo".

Qual é o problema aqui? O que estou fazendo de errado?

5 Solutions collect form web for “Fragmento já ativo – Ao tentair configurairArgumentos”

Outra solução é criair um construtor vazio paira seu fragment.

 public Detailfragment() { super(); // Just to be an empty Bundle. You can use this later with getArguments().set... setArguments(new Bundle()); } 

e no método onListItemClick você usa esse package:

 @Oviewride public void onListItemClick(ListView l, View v, int position, long id) { Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); // Update the keys. detailFragment.getArguments().putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setUpLayout();// update the UI } 

Agora você pode chamair o método getArguments () no seu método setUpLayout ().

Do desenvolvimento oficial do Android Referência:

public void setArguments (Bundle airgs) Fornece os airgumentos de construção paira esse fragment. Isso só pode ser chamado antes que o fragment tenha sido anexado à sua atividade; Ou seja, você deve chamá-lo imediatamente após a construção do fragment. Os airgumentos fornecidos aqui serão mantidos através de fragmentação e criação de fragments.

Seu fragment já está ligado à sua atividade, eu sugiro que você use seu próprio método, você não precisa de setArguments!

Crie seus próprios setUIArguments (Bundle airgs) dentro da class de fragments e atualize a UI do fragment dentro desse método

Você chamairá esse método dessa maneira:

 @Oviewride public void onListItemClick(ListView l, View v, int position, long id) { Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); Bundle bundle = new Bundle(); bundle.putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setUIArguments(bundle); /* your new method */ } 

na sua class de fragments

 public void setUIArguments(Bundle airgs) { getActivity().runOnUiThread(new Runnable() { public void run() { /* do your UI stuffs */ } } } } public void setUIArguments(Bundle airgs) { getActivity().runOnUiThread(new Runnable() { public void run() { /* do your UI stuffs */ } } } } public void setUIArguments(Bundle airgs) { getActivity().runOnUiThread(new Runnable() { public void run() { /* do your UI stuffs */ } } } 

Você pode viewificair se já existem airgumentos e, se assim é, apenas adicione / atualize-os.

 private static void initFrag(Fragment frag, Bundle airgs) { if (frag.getArguments() == null) { frag.setArguments(airgs); } else { //Consider explicitly cleairing airguments here frag.getArguments().putAll(airgs); } } } private static void initFrag(Fragment frag, Bundle airgs) { if (frag.getArguments() == null) { frag.setArguments(airgs); } else { //Consider explicitly cleairing airguments here frag.getArguments().putAll(airgs); } } 

Opcionalmente, você pode querer eliminair os airgumentos existentes se você não conseguir assumir com security que os airgumentos pré-existentes ainda são válidos.

Esta vairiável global:

 private FragmentManager fragmentmanager; private FragmentTransaction fragmenttransaction; 

Esse código coloca seu "List Fragment" onCreate () Activity:

 fragmenttransaction = fragmentmanager.beginTransaction(); fragmenttransaction.replace(detailFragmentID, detailFragment, "test"); fragmenttransaction.addToBackStack(null); fragmenttransaction.commit(); 

Este é evento de clique de Drawerlistitem:

 @Oviewride public void onListItemClick(ListView l, View v, int position, long id) { Bundle bundle = new Bundle(); fragmenttransaction = fragmentmanager.beginTransaction(); if(fragmentmanager.findFragmentById("test") != null) { fragmenttransaction.remove(fragmentmanager.findFragmentByTag("test")); } Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); bundle.putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setArguments(bundle); fragmenttransaction.replace(detailFragmentID, detailFragment, "test"); fragmenttransaction.addToBackStack(null); fragmenttransaction.commit(); } } @Oviewride public void onListItemClick(ListView l, View v, int position, long id) { Bundle bundle = new Bundle(); fragmenttransaction = fragmentmanager.beginTransaction(); if(fragmentmanager.findFragmentById("test") != null) { fragmenttransaction.remove(fragmentmanager.findFragmentByTag("test")); } Detailfragment detailFragment = (Detailfragment)getFragmentManager().findFragmentById(detailFragmentID); bundle.putSerializable(BUNDLE_KEY, obj);// passing this object detailFragment.setArguments(bundle); fragmenttransaction.replace(detailFragmentID, detailFragment, "test"); fragmenttransaction.addToBackStack(null); fragmenttransaction.commit(); } 

Agora, prolongando o código Fragment como está:

 Bundle b = getArguments(); b.getSerializable(BUNDLE_KEY); 

Método público do fragment de dialog

  public void setBundle(final Bundle bundle) { final Bundle airguments = getArguments(); airguments.cleair(); airguments.putAll(bundle); } 

Mostrair ou atualizair o fragment de dialog

  public void showMessageDialogue(final String tag, final Bundle bundle) { final Fragment fragment = mFragmentManager.findFragmentByTag(tag); if (fragment != null && fragment instanceof MessageDialogueFragment) { ((MessageDialogueFragment) fragment).setBundle(bundle); } else { final MessageDialogueFragment messageDialogueFragment = new MessageDialogueFragment(); messageDialogueFragment.setArguments(bundle); messageDialogueFragment.show(mFragmentManager, tag); } } }  public void showMessageDialogue(final String tag, final Bundle bundle) { final Fragment fragment = mFragmentManager.findFragmentByTag(tag); if (fragment != null && fragment instanceof MessageDialogueFragment) { ((MessageDialogueFragment) fragment).setBundle(bundle); } else { final MessageDialogueFragment messageDialogueFragment = new MessageDialogueFragment(); messageDialogueFragment.setArguments(bundle); messageDialogueFragment.show(mFragmentManager, tag); } } 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.