2013-07-01 14 views
11

Mam pasek działań, który umieszcza wszystko w menu w prawym górnym rogu, które użytkownik klika, a opcje menu otwierają się.element menu paska czynności onclick?

ja nadmuchać menu bar akcja z tym na każdej aktywności używam go:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main2, menu); 

     return true; 
    } 

A mój xml dla main2.xml jest:

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

    <item 
     android:id="@+id/action_searchHome" 
     android:orderInCategory="100" 
     android:showAsAction="never" 
     android:title="Seach"/> 



</menu> 

Moje pytanie brzmi, czy mogę położyć onclick w pozycji w xml i jeśli tak, to gdzie umieścić metodę onclick, którą wywołuje? Czy muszę umieszczać go w każdym działaniu, w którym uruchamiam ten pasek akcji?

+4

myślę, że może być szukasz [onOptionsItemSelected] (https://developer.android.com/reference/android/app/Activity.html#onOptionsItemSelected (android.view.MenuItem)) – adneal

+0

Sprawdź mój komentarz w odpowiedzi Eghdk, http://stackoverflow.com/questions/17396870/actionbar-menu-item-onclick#comment25260264 – LuckyMe

Odpowiedz

29

Jeśli dodaj atrybut onclick na menu tak:

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

    <item 
     android:id="@+id/action_searchHome" 
     android:orderInCategory="100" 
     android:showAsAction="never" 
     android:onClick="doThis" 
     android:title="Seach"/> 



</menu> 

Następnie w swojej działalności:

public void doThis(MenuItem item){ 
    Toast.makeText(this, "Hello World", Toast.LENGTH_LONG).show(); 
} 

Uwaga:

ActionBarSherlock jest przestarzałe. Jeśli nie tworzysz aplikacji dla Androida 4.0 lub starszego, nie używaj go. Ale jeśli używasz biblioteki, trzeba będzie importować

import com.actionbarsherlock.view.MenuItem;

a nie

import com.android.view.MenuItem;

Ponadto, można zrobić coś takiego: ActionBar Sherlock Menu Item OnClick

które wspomina @adneal.

+2

Nie jest to sposób, aby to zrobić, ' AcitonBars' mają własną metodę radzenia sobie z kliknięciami. Zajrzyj tutaj: http://developer.android.com/guide/topics/ui/menus.html#options-menu – LuckyMe

+0

Oba sposoby działają. Wspomniałem również o metodzie, którą właśnie wymieniłeś pod koniec mojej odpowiedzi. – EGHDK

+4

Tak, z technicznego punktu widzenia, oba mogą działać, ale jeden sposób jest właściwy, a drugi jest okropny. tworzy chaos i niespójność w kodzie. Proszę, dla miłości Boga, nigdy nie używaj tej metody dla pozycji menu. – LuckyMe

0

Moim zdaniem

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    add_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onCreateDialog(getTaskId()); 
     } 
    }); 
} 


<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 
<item android:id="@+id/action_settings" android:title="@string/action_settings" 
    android:orderInCategory="100" app:showAsAction="never" /> 
<item android:id="@+id/add_text_id" android:title="Add" 
    android:icon="@drawable/ic_add_btn" 
    android:orderInCategory="100" app:showAsAction="ifRoom" />