studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android android-3.0-honeycomb actionview

para - manual de programacion android pdf



Vista de acción personalizada no se puede hacer clic (3)

He encontrado una solución de trabajo para mí y quiero compartirla con ustedes. Se basa en el primer enfoque de (@Macarse), con algunos cambios importantes.

Importante: adapta el método initView en consecuencia

  1. Establecer un onClickListener en el ImageView ( mButton )

  2. Configure la carga como verdadera e informe a la Actividad ( MyActivity ) sobre el clic

    private void initView(final Context context) { final LayoutInflater inflator = LayoutInflater.from(context); final View actionView = inflator.inflate( R.layout.action_refresh_progress, this); mProgressBar = (ProgressBar) actionView .findViewById(R.id.action_refresh_progress); mButton = (ImageView) actionView .findViewById(R.id.action_refresh_button); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(final View view) { setLoading(true); ((MyActivity) context).handleRefreshButtonClick(); } }); }

  3. Reaccionar en consecuencia al clic en la actividad ( MyActivity ).

    public void handleRefreshButtonClick() { // Start refreshing... }

¡Espero que mi enfoque pueda ahorrarle tiempo buscando una solución de trabajo!

Estoy tratando de agregar un ActionView personalizado a mi ActionBar .

Estoy tratando de agregar el botón de actualización común. ( ImageButton , ProgressBar dentro de un FrameLayout ) pero si uso un ActionView onOptionsItemSelected() nunca se llama.

Aquí está el código:

En mi Activity :

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.messages_actionbar, menu); mRefreshView = (RefreshView) menu.findItem(R.id.messages_refresh).getActionView(); return super.onCreateOptionsMenu(menu); }

src de messages_actionbar ''s

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/messages_refresh" android:title="title" android:icon="@drawable/icon" android:showAsAction="always" android:actionViewClass="com.blabla.RefreshView"/> </menu>

RefreshView de RefreshView :

public class RefreshView extends FrameLayout { private ImageView mButton; private ProgressBar mProgressBar; private boolean mLoading; public RefreshView(Context context) { super(context, null); initView(context); } public RefreshView(Context context, AttributeSet attrs) { super(context, attrs, 0); initView(context); } public RefreshView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(context); } private void initView(Context context) { LayoutInflater inflator = LayoutInflater.from(context); View v = inflator.inflate(R.layout.actionbar_refresh, this); mProgressBar = (ProgressBar) v.findViewById(R.id.action_refresh_progress); mButton = (ImageView) v.findViewById(R.id.action_refresh_button); } public void setLoading(boolean loading) { if (loading != mLoading) { mProgressBar.setVisibility(loading ? View.VISIBLE : View.GONE); mButton.setVisibility(loading ? View.GONE : View.VISIBLE); mLoading = loading; } } }

código src de actionbar_refresh :

<?xml version="1.0" encoding="utf-8" ?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/action_refresh_button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:scaleType="center" android:background="@drawable/icon" /> <ProgressBar android:id="@+id/action_refresh_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" android:indeterminate="true" /> </FrameLayout>

Por otro lado, si configuro un clickListener a ImageView dentro de la clase RefreshView , se llama.

Alguien hizo esto ya?



onOptionsItemSelected() solo debe llamarse si el elemento de acción está en el menú de desbordamiento que también debe manejar. (lo tienes forzado a "siempre" en la barra de acción, por lo que onOptionsItemSelected() no será llamado).

En onCreateOptionsMenu() después de inflar, debe configurar un OnMenuItemClickListener para el elemento de menú.