2017-05-05 30 views
0

因此,我在菜單res/menu/menu_item.xml中設置了2個菜單項。我想在菜單項上添加onClick方法,但我在哪裏放置方法?我將menu_item設置爲3個不同的活動,但我想要一個通用方法,它由menu_item.xml文件中的onClick方法調用。將android:onClick設置爲XML中的菜單項 - 在哪裏放置方法?

RES /菜單/ menu_item.xml代碼:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/action_settings" 
     android:orderInCategory="100" 
     android:title="Household" 
     app:showAsAction="never" 
     android:onClick="myHousehold"/> 

    <item 
     android:id="@+id/profile" 
     android:orderInCategory="100" 
     android:title="About" 
     app:showAsAction="never" 
     android:onClick="aboutApp"/> 

</menu> 

這是使用這種XML來設置每個活動的菜單的方法。

public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_menu, menu); 
     return super.onCreateOptionsMenu(menu); 
} 

回答

0

你其實並不需要onClick,應該增加這樣的方法進入菜單項活動:

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
     case R.id.action_settings: 
     { 
      // Here you can set your intent and start the activity 
      Intent intent1 = new Intent(this, myActivity.class); 
      this.startActivityForResult(intent1, MY_ACTIVITY_REQUEST); 
      return super.onOptionsItemSelected(item); 
     } 

     case R.id.profile: 
     { 
      // Here you can set your intent and start the activity 
      return super.onOptionsItemSelected(item); 
     } 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
0

你必須從你的Activity類重寫onOptionsItemSelected方法和檢查selected項目,根據您的需求做您的操作。

試試這個:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 
     case R.id.action_action_settings: { 
      // Do something 

      return true; 
     } 
     case R.id.profile: { 
      // Do something 

      return true; 
     } 
    } 
    return super.onOptionsItemSelected(item); 
} 

創建common類象下面這樣:

//Utils.java 

public class Utils{ 
    Context mContext; 

    // constructor 
    public Utils(Context context){ 
     this.mContext = context; 
    } 

    public String getUserName(){ 
     return "test"; 
    } 

    public void doSomething(){ 
     // Do something 
    } 
} 

從所有活動都使用它:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 
     case R.id.action_action_settings: { 
      Utils utils = new Utils(getApplicationContext()); 
      String username = utils.getUserName(); 

      return true; 
     } 
     case R.id.profile: { 
      // Do something 
      Utils utils = new Utils(getApplicationContext()); 
      utils.doSomething(); 

      return true; 
     } 
    } 
    return super.onOptionsItemSelected(item); 
} 

希望這會有所幫助〜

+0

所以這種方法將需要被添加到包含選項菜單的每個活動? – alanp2017

+0

是的,你必須從每個具有選項菜單的活動中覆蓋它 – FAT

+0

啊好的。我想知道是否有辦法創建一個方法來處理所有這些方法,因此我使用的是onClick方法。因爲所有的活動都使用相同的菜單文件,所以這是一種通用的方法。 – alanp2017