2014-01-05 11 views
5

In meiner Aktionsleiste festgelegt hat, wie ich einen Menüpunkt definiert haben, die unter Text „DONE“ durch den Code zeigen:onOptionsItemSelected() nicht aufgerufen, wenn auf den Menüpunkt klicken, die eine actionLayout auf sie

Menu.xml :

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item android:id="@+id/action_register_text" 
    android:actionLayout="@layout/action_done_text" 
    android:title="@string/action_done" 
    android:showAsAction="always"/> 

</menu> 

action_done_text.xml:

<?xml version="1.0" encoding="utf-8"?> 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/expand_activities_button" 
android:layout_height="match_parent" 
android:layout_width="wrap_content" 
android:layout_gravity="center" 
android:clickable="true" 
android:focusable="true" 
android:addStatesFromChildren="true"> 

<TextView 
    android:id="@+id/register_action_bar_done" 
    android:layout_width="53dp" 
    android:layout_height="35dp" 
    android:layout_gravity="center" 
    android:layout_marginRight="10dip" 
    android:gravity="center" 
    android:text="DONE" /> 

</FrameLayout> 

ich habe onCreateOptionsMenu im Code ordnungsgemäß umzusetzen, und die Aussicht, den Text richtig dargestellt, aber nur, wenn ich auf dem DO tippen NE-Text, onOptionsItemSelected wird nicht aufgerufen. Mir scheint, dass das Klickereignis nicht erkannt wird.

Ich habe mich gefragt, ob der obige Weg keine gute Möglichkeit ist, einen Textmenüpunkt hinzuzufügen?

+1

Bitte gezeigt Präfix nicht Ihre Fragen Titel mit 'Android', das Etikett an der Unterseite ist mehr als genug, würden Sie nur Unordnung auf den Titel hinzufügen. Es ist normal, dass der Rückruf nicht ausgelöst wird, da Sie unterschiedliche Ansichten im Aktionslayout haben können und Android nicht erraten kann, welches Ereignis ausgelöst werden soll. Rufen Sie im 'onCreateOptionMenu()' einen Verweis auf den Menüeintrag ab, rufen Sie seine Aktionsansicht ab und setzen Sie einen Klick-Listener darauf. – Luksprog

Antwort

3

verwenden wie in onOptionsItemSelected not called when using actionLayout (SherlockActionBar)

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.map_menu, menu); 
    for (int i = 0; i < menu.size(); i++) { 
     MenuItem item = menu.getItem(i); 
     if (item.getItemId() == R.id.menu_more) { 
      itemChooser = item.getActionView(); 
      if (itemChooser != null) { 
       itemChooser.setOnClickListener(this); 
      } 
     } 
    } 
    return super.onCreateOptionsMenu(menu); 
}