Rafraîchir mes fragment ne fonctionne pas comme je le pensais, il devrait

J'ai cette belle méthode dans mon ListFragment j'appelle de remplir les détails de mon autre fragment:

private void showClientDetails(int pos) {           
        myCursor.moveToPosition(pos);
        int clientId = myCursor.getInt(0);         
        if(mIsTablet) {

                //Set the list item as checked
                getListView().setItemChecked(mCurrentSelectedItemIndex, true);

                //Get the fragment instance
                ClientDetails details = (ClientDetails) getFragmentManager().findFragmentById(R.id.client_details);
                //Is the current visible recipe the same as the clicked? If so, there is no need to update

                if (details == null || details.getClientIndex() != mCurrentSelectedItemIndex) {
                        //Make new fragment instance to show the recipe
                        details = ClientDetails.newInstance(mCurrentSelectedItemIndex, clientId, mIsTablet);
                        //Replace the old fragment with the new one
                        FragmentTransaction ft = getFragmentManager().beginTransaction();
                        ft.replace(R.id.client_details, details);
                        //Use a fade animation. This makes it clear that this is not a new "layer"
                        //above the current, but a replacement
                        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                        ft.commit();
                }
        }
}

Il est appelé lorsque l'utilisateur clique sur un client dans le ListFragment vue:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
       mCurrentSelectedItemIndex = position;    
           showClientDetails(position);
}

Cela fonctionne très bien, mais alors un autre FragmentActivity pouvez modifier les données que cette affiche j'ai donc pensé que ce serait le travail:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{

    super.onActivityResult(requestCode, resultCode, data);          
            //update the client list incase a new one is added or the name changes
    if(requestCode==1899)
    {               
      myCursor.requery();
      theClients.notifyDataSetChanged();
          showClientDetails(mCurrentSelectedItemIndex); //now if client was edited update their details in the details fragment
    }
}

Maintenant, je sais que la ligne:

if (details == null || details.getClientIndex() != mCurrentSelectedItemIndex) {

Empêche le bloc de code étant atteint lorsque son appelé mon onActivityResult. Donc, si je retire que if déclaration, puis les choses freak out et le ft.commit() a un hissy fit et me donne l'erreur:

`07-08 16:53:31.783: ERREUR/AndroidRuntime(2048): Causée par: java.lang.IllegalStateException: vous ne Pouvez pas effectuer cette action après onSaveInstanceState

Donc je suppose que ce que je suis en train de faire n'est pas aussi coupé et sec, comme il semble, il ne fait aucun sens pour moi, car je peux le faire onListItemClicked toute la journée et le fragment affiche les détails de la nouvelle cliqué client constamment très bien...

J'ai même essayé dans mon onActivityResult:

//simulate a click event really fast to refresh the client details
showClientDetails(0);
showClientDetails(mCurrentSelectedItemIndex);

qui ne fait rien, est-il im essayant d'appeler quelque chose à partir de la onActivityResult ce qui n'est pas un thread d'Interface utilisateur ou ce pas?

J'ai ceci dans mon code de la ListFragment ainsi

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
outState.putInt("currentListIndex", mCurrentSelectedItemIndex);
}

Est-ce que l'erreur est de se plaindre?

OriginalL'auteur Codejoy | 2011-07-08