2012-05-20 9 views
24

¿Es posible mostrar el indicador de progreso (el que es mostrar mediante requestWindowFeature (Window.FEATURE_INDETERMINATE_PROGRESS) en lugar de un botón de actualización?actionbar indicador de progreso y refrescar el botón

La idea es trabajar como cliente de Gmail hace : Cuando no está cargando, muestra el botón de actualización y al cargar muestra el spinner indeterminado en el lugar del botón Actualizar

Respuesta

0

Puedes intentar lo siguiente: pon el botón Actualizar y el rotador indeterminado dentro de un FrameLayout, por lo que los dos se apilan en el z-plane, muestra en la misma posición en la pantalla. Luego solo tienes que jugar con la visibilidad. Cuando quieras mostrar el botón de actualización, configuras el s pinner a invisible y el botón a visible. Cuando desee mostrar la ruleta, configúrela como visible y el botón como invisible.

+0

Sé cómo puedo diseñarlo manualmente, pero quiero hacerlo en la barra de acciones. – lujop

+2

¿No es mi respuesta útil para ti? Ni siquiera lo comentaste. :) – tasomaniac

+0

¿Es posible cambiar con un intento de transmisión? – Maxrunner

52

Sí, puede hacerlo fácilmente de esta manera.

private MenuItem refresh; 
. 
. 
. 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.options_menu, menu); 

    // refresh menu item 
    refresh = menu.findItem(R.id.refresh_option_item); 

    return super.onCreateOptionsMenu(menu); 
} 

Usted tiene que conseguir su elemento de menú de actualización como la de arriba y luego, puede activar el elemento de giro, como a continuación:

refresh.setActionView(R.layout.actionbar_indeterminate_progress); 

y cuando la tarea se ha completado, se puede desactivar girando como a continuación:

refresh.setActionView(null); 

Y, por último, la actionbar_indeterminate_progress.xml puede ser como este:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="64dp" 
    android:layout_height="wrap_content" 
    android:gravity="center"> 
    <ProgressBar android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:layout_gravity="center" 
     style="?android:attr/indeterminateProgressStyle" /> 
</FrameLayout> 
+1

el problema con esto es que a veces esa referencia es nula y obtendrás npe. No sé cómo reproducirlo pero está sucediendo para mí. Usé tu mismo enfoque ... – gwa

+0

No sucedió por lo menos una vez. Cuando se crea su menú, se crea una variable de actualización. El usuario que hace clic en ese botón de actualización significa que, por supuesto, fue creado anteriormente. – tasomaniac

+1

¡Con algunas adaptaciones funciona como un encanto! Y es mejor que la rueda predeterminada. –

Cuestiones relacionadas