2013-07-01 41 views
11

Tôi có một thanh tác vụ đặt tất cả mọi thứ trong menu ở trên cùng bên phải, người dùng nhấp vào và các tùy chọn trình đơn mở ra.mục menu trên thanh tác vụ onclick?

tôi thổi phồng menu thanh tác vụ có này trên mỗi hoạt động tôi sử dụng nó:

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

Và xml của tôi cho main2.xml là:

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

Câu hỏi của tôi là làm tôi đặt một onclick trong mục trong xml và nếu như vậy, nơi nào tôi đặt phương thức onclick mà nó gọi? Tôi có cần phải đặt nó trong mọi hoạt động tôi khởi động thanh tác vụ này không?

+4

Tôi nghĩ rằng bạn có thể tìm kiếm [onOptionsItemSelected] (https://developer.android.com/reference/android/app/Activity.html#onOptionsItemSelected (android.view.MenuItem)) – adneal

+0

Kiểm tra bình luận của tôi dưới câu trả lời của Eghdk, http://stackoverflow.com/questions/17396870/actionbar-menu-item-onclick#comment-25260264 – LuckyMe

Trả lời

29

Nếu bạn thêm thuộc tính một onClick vào mục trình đơn của bạn như thế này:

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

Sau đó, trong hoạt động của bạn:

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

Lưu ý:

ActionBarSherlock được phản. Trừ khi bạn đang phát triển một ứng dụng cho Android 4.0 trở lên, vui lòng không sử dụng ứng dụng đó. Nhưng nếu bạn đang sử dụng thư viện, bạn sẽ phải nhập khẩu

import com.actionbarsherlock.view.MenuItem;

và không

import com.android.view.MenuItem;

Bên cạnh đó, bạn có thể làm một cái gì đó như thế này: ActionBar Sherlock Menu Item OnClick

mà @adneal đề cập đến.

+2

Không có cách nào để làm điều này, ' AcitonBars' có phương pháp riêng để xử lý các nhấp chuột. Xem tại đây: http://developer.android.com/guide/topics/ui/menus.html#options-menu – LuckyMe

+0

Cả hai cách đều hoạt động. Ngoài ra, tôi đã đề cập đến phương pháp bạn vừa liệt kê ở cuối câu trả lời của tôi. – EGHDK

+4

Vâng, về mặt kỹ thuật, cả hai đều có thể hoạt động, nhưng một cách là đúng cách và cách khác là một cách khủng khiếp khủng khiếp. nó tạo ra sự hỗn loạn và không mạch lạc trong mã. Xin vui lòng cho tình yêu của Thiên Chúa, không bao giờ sử dụng phương pháp này cho các mục Menu. – LuckyMe

0

Theo tôi

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" /> 

Các vấn đề liên quan