我的图书馆有一个活动,里面有一个菜单。菜单具有所有标准属性,以及onCreateOptionsMenu和onOptionsItemSelected上的@Override。
在导入库之上的实际项目中,我还有另一个活动超出了活动。对于此程序的此特定实现,我希望此活动具有不同的菜单,因此在此活动代码库内,添加带有正确@Override的add onCreateOptionsMenu和onOptionsItemSelected,但是我从库中获取菜单,而不是从库中获取覆盖。
我可能做错了什么?
基类:
public class ListItems extends ListActivity {
public static final int LOGOUT = 0;
public static final int HISTORY = 1;
public static final int REFRESH = 2;
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(0, LOGOUT ,0,"Log Out");
menu.add(0,HISTORY,0,"Order History");
menu.add(0,REFRESH,0,"SMS");
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item){
TextView textView = (TextView)findViewById(com.imobileminutes.library.R.id.text);
switch (item.getItemId()){
case LOGOUT:
Intent logOut = new Intent(ListItems.this,MainScreen.class);
startActivity(logOut);
finish();
return true;
case HISTORY:
Intent orderHistory = new Intent(this,OrderItems.class);
startActivity(orderHistory);
return true;
case REFRESH:
Intent orderHistory = new Intent(this,OrderItems.class);
startActivity(orderHistory);
return true;
}
return false;
}
}
覆写类别
public class ListItems extends com.imobileminutes.library.ListItems {
static final int SMS = 2;
@Override
public boolean onCreateOptionsMenu(Menu menu){
Log.d("onCreateOptionsMenu", "My onCreateOptionsMenu ran");
Toast.makeText(getApplicationContext(), "HEllo Menu Created", Toast.LENGTH_LONG).show();
super.onCreateOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item){
Log.d("onCreateOptionsMenu", "My onOptionsItemSelected ran");
Toast.makeText(getApplicationContext(), "HElloonOptionsItemSelected", Toast.LENGTH_LONG).show();
super.onOptionsItemSelected(item);
return false;
}
}
结论
结果是我的库正在调用ListItems.this和CreateAccount.this,它们引用的是库中的活动,而不是扩展类中的活动。
我为每种扩展活动类型添加了一个意图,然后调用它,从而调出了扩展活动而不是基础活动。
感谢您的帮助。
最佳答案
您未正确复制和粘贴代码,或者部分问题出在您的基类中,该基类为onCreateOptionsMenu
提供了与派生类相同的定义:
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(0, LOGOUT ,0,"Log Out");
menu.add(0,HISTORY,0,"Order History");
menu.add(0,REFRESH,0,"SMS");
return true;
}
最后一行可能不正确-我很确定基类实现的最后一行应该是:
menu.add(0,REFRESH,0,"REFRESH");
。但是
onCreateOptionsMenu
的最后一行也需要在派生类中进行更改:@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(0, LOGOUT ,0,"Log Out");
menu.add(0, HISTORY,0,"Order History");
menu.add(0, SMS,0,"SMS"); // Use the correct constant (SMS instead of REFRESH)
return true;
}
编辑:此外,通过对当前仅复制超类代码(LOGOUT和HISTORY)的那些选择重新使用超类实现,就可以简化代码。
@Override
public boolean onOptionsItemSelected (MenuItem item){
TextView textView = (TextView)findViewById(com.imobileminutes.library.R.id.text);
// Left this as a 'switch'; you might want to use an 'if' instead.
switch (item.getItemId()){
case SMS:
AppClass.sendSMS("8135551212", "Hello Jason");
return true;
}
return super.onOptionsItemSelected(item);
}