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