将android:onClick设置为XML中的菜单项 - 何处放置方法?

时间:2017-05-05 22:47:03

标签: android xml

所以我在res / menu / menu_item.xml中有一个设置了2个项目的菜单。我想在菜单项上添加onClick方法,但是我在哪里放置方法?我在3个不同的活动上设置了menu_item,但我想要一个通用方法,该方法由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>

这是使用此XML在每个活动上设置菜单的方法。

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

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

您必须覆盖onOptionsItemSelected课程中的Activity方法并检查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);
}

希望这会有所帮助〜