2012-01-30 10 views
30

Sto usando l'ActionBar. Mi piacerebbe avere uno spinner di progresso di aggiornamento sulla barra del titolo, se lo metto in rotazione, altrimenti lo nascondi. È che possibile ?:Mostra lo stato di avanzamento (aggiornamento) su ActionBar?

// My menu has a refresh item, but it shouldn't be visible on the 
// actionbar unless it's spinning. 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu_refresh" 
    android:title="@string/refresh" 
    android:icon="@drawable/ic_action_refresh" /> 
</menu> 

... 

// When I need to show some work being done on my activity, 
// can I somehow now make the spinner associated with the 
// refresh item become visible on the action bar? 
getActionBarHelper().setRefreshActionItemState(true); 

Non voglio sul ActionBar meno che non sia "in corso"/spinning.

Grazie

risposta

75

scuse per non tag codice, distacco dal telefono ...

Questo è da ActionBarSherlock (Google che se non è venuto attraverso di esso, permette ActionBar sostegno in pre nido d'ape)

in onCreate di attività principale

// This has to be called before setContentView and you must use the 
// class in android.support.v4.view and NOT android.view 

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 

per mostrare/nascondere progresso nella barra delle operazioni. Si noti con ActionBarSherlock è necessario utilizzare boolean.TRUE/FALSE, non solo vero/falso .........

if (getSupportLoaderManager().hasRunningLoaders()) { 
    setProgressBarIndeterminateVisibility(Boolean.TRUE); 
} else { 
    setProgressBarIndeterminateVisibility(Boolean.FALSE); 
} 
+0

Ok grazie scaverò un po 'lì dentro. L'esempio fornito con l'SDK non è buono come inizialmente pensavo. Stanno usando Window.FEATURE_CUSTOM_TITLE che ha l'effetto di mostrare all'utente una barra del titolo prima di essere completamente disegnata come vuoi, sembra davvero poco professionale. Sospiro. – user291701

+0

@Jake Wharton Sto cercando di risolvere questo problema. Quando viene premuto il pulsante 'refresh', viene richiamato il callback' onOptionsItemSelected'. Dove chiamiamo 'setProgressBarIndeterminateVisibility' come suggerito da MartinS. –

+19

Se si utilizza ActionBarSherlock, assicurarsi di utilizzare setSupportProgressBarIndeterminateVisibility(). Altrimenti, l'indicatore di avanzamento girerà continuamente e non saprai perché. –

3

Se si estende da un ActionBarActivity, provate questo:

public class MainActivity extends ActionBarActivity { 

    boolean showUp=true; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     setContentView(R.layout.activity_main); 
     setSupportProgressBarIndeterminateVisibility(Boolean.TRUE); 

     Button b = (Button) findViewById(R.id.myButton); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if(showUp){ 
        setSupportProgressBarIndeterminateVisibility(Boolean.FALSE); 
       }else { 
        setSupportProgressBarIndeterminateVisibility(Boolean.TRUE); 
       } 
       showUp=!showUp; 
      } 
     }); 
} 
+0

"Window" appartiene a quale pacchetto? – Hesam

+3

La libreria di supporto v21 non supporta questo, quindi fai attenzione. : //stackoverflow.com/questions/26443490/appcompat-show-progress-in-action-bar-causes-npe e https://chris.banes.me/2014/10/17/appcompat-v21/#comment- 1642002459 – indyfromoz

Problemi correlati