将android:onClick设置为XML格式的菜单项-方法的放置位置?

将android:onClick设置为XML格式的菜单项-方法的放置位置?,android,xml,Android,Xml,所以我在res/menu/menu_item.xml中有一个菜单,上面设置了两个项目。我想将onClick方法添加到菜单项中,但该方法放在哪里?我在3个不同的活动上设置了menu_项,但我需要一个通用方法,该方法由menu_item.xml文件中的onClick方法调用 res/menu/menu_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.andr

所以我在res/menu/menu_item.xml中有一个菜单,上面设置了两个项目。我想将onClick方法添加到菜单项中,但该方法放在哪里?我在3个不同的活动上设置了menu_项,但我需要一个通用方法,该方法由menu_item.xml文件中的onClick方法调用

res/menu/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>

实际上,您不需要单击
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);
    }
}

您必须重写
活动
类中的
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);
}
//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);
}
创建一个
通用
类,如下所示:

@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);
}
//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);
}
在所有活动中使用它:

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

希望这会有所帮助~

因此需要将此方法添加到包含选项菜单的每个活动中?是的,您必须从具有选项菜单的每个活动中覆盖它。好的。我想知道是否有一种方法可以创建一个作用于所有方法的方法,因此我使用的是onClick方法。因为所有活动都使用相同的菜单文件,所以它将是一个通用方法。您必须覆盖从所有活动中选择的OnOptions Item。但您可以为项目单击操作创建通用方法。就像用户单击profile选项一样,您可以为它创建一个通用方法,并在所有活动中使用它。