java - 覆盖覆盖?

标签 java android

我在库中有一个 Activity ,其中有一个菜单。菜单具有所有标准属性以及 onCreateOptionsMenu 和 onOptionsItemSelected 上的 @Override。

在我导入上述库的实际项目中,我有另一个扩展上述 Activity 的 Activity 。对于这个程序的这个具体实现,我想在这个 Activity 上有一个不同的菜单,所以在这个 Activity 代码库中添加 onCreateOptionsMenu 和 onOptionsItemSelected 以及正确的@Override,但我从库中获取菜单,而不是库中的覆盖。

我做错了什么?

基类:

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,它们引用的是库中的 Activity ,而不是扩展类中的 Activity 。

我为每个扩展 Activity 类型添加了一个 Intent ,并且没有调用它,因此启动了扩展 Activity 而不是基本 Activity 。

谢谢大家的帮助。

最佳答案

要么您没有正确复制和粘贴代码,要么部分问题出在您的 base 类中,该类为 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;
}

编辑:此外,您还可以稍微简化代码,方法是为您当前只是复制父类(super class)代码(LOGOUT 和 HISTORY)的那些选择重新使用父类(super class)实现:

@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);
}

关于java - 覆盖覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6311258/

相关文章:

JavaFX 不绑定(bind)属性成员来控制

java - 有没有一种方法可以根据属性将 Runnable Tasks 分组到同一个线程中,以便具有相同属性的 Runnables 同步运行?

Java Files.write NoSuchFileException

android - 单击按钮时更新 recyclerview

android - 通过 NFC 将 URL 从 Android 发送到 Windows Phone 会提供 Play Store 链接

android - 如何从 tabactivity 启动的 Activity 更改 tabactivity 的选项卡?或更改当前选项卡

java - 在 Java 中解析命令行参数时出现异常 : org. apache.commons.cli.MissingOptionException

java - jsoup 从网站重定向解析

android - 同一个项目,但可以相互定制和安装?

android - 如何在 Android 中以编程方式获取铃声 "/system/media/audio/ringtones"的路径?