4

Ich habe zwei ListFragments (A und B, die eigentlich SherlockListFragments sind) und wenn ich einen Breakpoint in die onCreateOptionsMenu in beiden Fragmenten einfüge, wird Fragment A dreimal und Fragment B zweimal getroffen. Darüber hinaus bin ich Animieren einer der Menü-Symbol, wenn ein AsyncTask läuft, und wenn ich ein Element in Fragment A auswählen, wird onCreateOptionsMenu erneut aufgerufen und das Symbol verdoppeln:onCreateOptionsMenu trifft mehrfach mit Fragmenten

enter image description here

Ich bin nicht sicher warum onCreateOptionsMenu erneut aufgerufen, weil ich nur eine Methode in dem „Details“ Fragment Aufruf:

@Override 
public void onListItemClick(final ListView l, final View v, final int position, final long id) 
{ 
    DetailsFragment fragment = (DetailsFragment)getFragmentManager().findFragmentById(R.id.fragmentDetails); 

    if (fragment != null && fragment.isInLayout()) 
    { 
     fragment.DisplayItems(); 
    } 
    else 
    { 
     final Intent listing = new Intent(activity.getApplicationContext(), DetailsFragmentActivity.class); 
     startActivity(listing); 
    } 
} 

UPDATE:

ich diesen Code mit dem Menüpunkt zu animieren:

private MenuItem refreshItem; 

private void DoRefresh() 
{ 
    final LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view, null); 

    final Animation rotation = AnimationUtils.loadAnimation(activity, R.anim.refresh); 
    ImageView ivRefresh.startAnimation(rotation); 

    refreshItem.setActionView(ivRefresh); 

    //AsyncTask is kicked off here 
} 

@Override 
public boolean onOptionsItemSelected(final MenuItem item) 
{ 
    if (item.getItemId() == R.id.refresh) { 
     refreshItem = item; 
     this.DoRefresh(); 
     return true; 
    } else { 
     return super.onOptionsItemSelected(item); 
    } 
} 

Antwort

4

Aus der Dokumentation:

„Nach dem System ruft onCreateOptionsMenu(), behält es eine Instanz der Menu Sie bevölkern und onCreateOptionsMenu nicht nennen() erneut, wenn das Menü aus irgendeinem Grund für ungültig erklärt wird. Sie sollten onCreateOptionsMenu() jedoch nur verwenden, um den anfänglichen Menüstatus zu erstellen und während des Aktivitätslebenszyklus keine Änderungen vorzunehmen. "

Ich vermute, dass das Menü durch etwas ungültig gemacht wird, was Sie tun. Was bedeutet fragment.displayItems() tun?

+0

Ich habe etwas Code zu meinem OP, die zeigt, wie ich die Menüpunkte aktualisieren.Nicht sicher, ob dies das Menü ungültig ist.Was "DisplayItems" tut, habe ich nicht der Code vor mir, aber es füllt im Grunde einen benutzerdefinierten Adapter für eine "ListView". Sollte das Menü überhaupt nicht beeinflussen. –

+2

Also, ich bin ein Idiot und ich habe "InvalidateOptionsMenu" in den "DisplayItems" eingefügt "Funktion vor einer Weile und habe vergessen, es herauszunehmen, aber ich werde Ihnen die Ehre geben, das Menü als Ursache ungültig zu machen. –

+0

froh, dass Sie das Problem gefunden haben. –