2017-05-05 49 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