Benutzerdefinierte Aktionsansicht kann nicht angeklickt werden

Ich versuche, eine eigene ActionView zu meiner ActionBar .

Ich versuche, den gemeinsamen Refresh-Button hinzuzufügen. ( ImageButton , ProgressBar in einem FrameLayout ), aber wenn ich eine ActionView onOptionsItemSelected() wird niemals aufgerufen.

  • So öffnen Sie eine Datei in Android über eine Absicht
  • Was soll ich für die Wurzel übergeben, wenn ich ein Layout auflade, das für eine ActionView von MenuItem verwendet werden soll?
  • Hier ist der Code:

    In meiner 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); } 

    messages_actionbar 's src:

     <?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 Code:

     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; } } } 

    actionbar_refresh src Code:

     <?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> 

    Auf der anderen Seite, wenn ich einen clickListener auf die ImageView in der RefreshView Klasse RefreshView , wird es aufgerufen.

    Wer hat das schon gemacht?

  • So fügen Sie das Ladekennzeichen zu AutoCompleteTextView hinzu
  • CONNECTIVITY_ACTION Intention erhielt zweimal, wenn Wifi verbunden
  • PhoneGap Android: Wie Kraft Anwendung auf Icons aus Asset \ www \ res statt res \ Drawable Ordner verwenden?
  • Android Emulator System Bilder und AMD Prozessor
  • Deaktivieren der Navigationsschublade, Umschalten von Home-Button / Up-Indikator in Fragmenten
  • Argument zu DialogFragment übergeben
  • 3 Solutions collect form web for “Benutzerdefinierte Aktionsansicht kann nicht angeklickt werden”

    onOptionsItemSelected() sollte nur aufgerufen werden, wenn sich das Aktionselement im Überlaufmenü befindet, das du auch behandeln solltest. (Sie haben es gezwungen, "immer" auf onOptionsItemSelected() , so onOptionsItemSelected() wird nicht angerufen).

    Bei onCreateOptionsMenu() nach dem Aufblasen müssen Sie einen OnMenuItemClickListener für den Menüpunkt OnMenuItemClickListener .

    Ich habe mit dem src-Code von http://code.google.com/p/styled-action-bar/ gearbeitet .

    Ich habe eine funktionierende Lösung für mich gefunden und ich möchte es mit Ihnen teilen. Es basiert auf dem ersten Ansatz von (@Macarse), mit einigen wichtigen Änderungen.

    Wichtig: Anpassung der initView- Methode entsprechend

    1. Setzen Sie einen onClickListener auf die ImageView ( mButton )

    2. Legen Sie das Laden auf true & informieren Sie die Aktivität ( MyActivity ) über den Klick

       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. Reagiere entsprechend dem Klick in der Aktivität ( MyActivity )

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

    Ich hoffe, dass mein Ansatz Sie sparen könnte einige Zeit eine funktionierende Lösung zu finden!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.