我有10个可扩展baseActivity的活动。我的BaseActivity基本上有一个帮助菜单图标。当用户按下帮助菜单图标时,我应该显示该活动的帮助菜单。我怎么知道哪个活动称为帮助菜单,所以我知道要显示哪个xml资源
public class BaseActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.help_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.help_menu_item:
displayHelpMenu();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
protected void displayHelpMenu(){
// I will load the xml to the textview and display it in dialog. How can I know which xml resource to load
}
}
找出的一种方法Activity
是使用instanceOf
。像这样的东西:
protected void displayHelpMenu() {
// I will load the xml to the textview and display it in dialog.
// How can I know which xml resource to load
if(this instanceOf DerivedActivity.class) {
// load XML file
}
else if(...) {
...
}
}
但是,我认为,尽管这可以解决您的问题,但这并不是正确的处理方式。在OOP中,当您遇到这样的情况时,应使用方法重写。
该base class
定义加载资源,而派生类应提供的文件加载名称的一般功能。换句话说,base class
不应了解derived class
。更好的解决方案是:
protected void displayHelpMenu() {
// ask each child class for the help menu resource file
int resId = getHelpMenuResource();
// write code to load XML file with resId
...
...
}
protected int getHelpMenuResource() {
return defaultMenuId;
}
现在在您的派生类中,@Override
该getHelpMenuResource()
活动专用的方法和返回资源ID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句