gpt4 book ai didi

java - 在哪里声明全局使用的 onOptionsItemSelected?

转载 作者:行者123 更新时间:2023-11-29 21:46:30 25 4
gpt4 key购买 nike

我是 Android 开发的新手。

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

当用户转到 Settings.java 页面并单击菜单中的 Home 选项时,没有任何反应。我知道这是因为 onOptionsItemSelected(MenuItem menu) 仅在 MainActivity.java 类中定义,而不是在 Settings.java 类中定义。

我现在通过将 MainActivity.java 中的 onOptionsItemSelected(MenuItem menu) 复制到 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();
}
}

Settings.java

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 的 Activity,它具有您常用的 onOptionsItemSelected() 代码,那么扩展此类以创建 MainActivity Settings 这两个类都将使用 super 类(即 BaseActivity 的)onOptionsItemSelected()

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

关于java - 在哪里声明全局使用的 onOptionsItemSelected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15665931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com