Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在何处声明OnOptions ItemSelected以供全局使用?_Java_Android - Fatal编程技术网

Java 在何处声明OnOptions ItemSelected以供全局使用?

Java 在何处声明OnOptions ItemSelected以供全局使用?,java,android,Java,Android,我对Android开发非常陌生 在我的MainActivity.java文件中,我声明了一个onOptionsItemSelected(MenuItem菜单)方法,允许用户在当前MainActivity.java页面和我创建的另一个名为Settings.java的页面之间跳转 当用户进入Settings.java页面,单击菜单中的Home选项时,不会发生任何事情。我知道这是因为onoptionItemSelected(MenuItem菜单)仅在MainActivity.java类中定义,而不是在

我对Android开发非常陌生

在我的
MainActivity.java
文件中,我声明了一个
onOptionsItemSelected(MenuItem菜单)
方法,允许用户在当前
MainActivity.java
页面和我创建的另一个名为
Settings.java
的页面之间跳转

当用户进入
Settings.java
页面,单击菜单中的
Home
选项时,不会发生任何事情。我知道这是因为
onoptionItemSelected(MenuItem菜单)
仅在
MainActivity.java
类中定义,而不是在
Settings.java
类中定义

我现在正通过将
onoptionItemSelected(MenuItem菜单)
MainActivity.java
复制到
Settings.java
来克服这个问题。但这是非常多余的

我应该在哪里声明可以在不同类中重用的方法

MainActivity.java

public class MainActivity extends Activity {
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                showMsg("Settings Clicked");
                this.startActivity(new Intent(this, Settings.class));
                return true;
            case R.id.action_home:
                showMsg("Home clicked");
                this.startActivity(new Intent(this, MainActivity.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private void showMsg(String msg) {
        Toast toast = Toast.makeText(this.getBaseContext(), msg, Toast.LENGTH_LONG);
        toast.show();
    }
}
public class Settings extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                this.startActivity(new Intent(this, Settings.class));
                return true;
            case R.id.action_home:
                this.startActivity(new Intent(this, MainActivity.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
Settings.java

public class MainActivity extends Activity {
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                showMsg("Settings Clicked");
                this.startActivity(new Intent(this, Settings.class));
                return true;
            case R.id.action_home:
                showMsg("Home clicked");
                this.startActivity(new Intent(this, MainActivity.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private void showMsg(String msg) {
        Toast toast = Toast.makeText(this.getBaseContext(), msg, Toast.LENGTH_LONG);
        toast.show();
    }
}
public class Settings extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                this.startActivity(new Intent(this, Settings.class));
                return true;
            case R.id.action_home:
                this.startActivity(new Intent(this, MainActivity.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

如果您创建了一个名为
BaseActivity
的活动,该活动包含您常用的
onoptionItemSelected()
代码,则扩展该类以创建
MainActivity
Settings
这两个类都将使用
super
类(即
BaseActivity
onoptionItemSelected()


另一种方法是切换到片段,因为片段使用宿主活动的
onOptionsItemSelected()
以及它们自己的。这两种策略都允许您使用“集中式”代码,而不必维护多个“剪切粘贴”副本。

谢谢。我最终使用了
BaseActivity
选项。我将在不久的将来调查这些碎片。