2011-06-10 309 views
1

我在图书馆里有一个活动,里面有一个菜单。该菜单具有所有标准属性以及onCreateOptionsMenu和onOptionsItemSelected上的@Override。覆盖覆盖?

在我上面导入库的实际项目中,我有另一个活动延伸到上面的活动。对于这个程序的这个特定的实现,我想在这个活动上有一个不同的菜单,所以在这个活动代码库中添加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这是指图书馆中不在扩展类中的活动。

我为每个扩展活动类型添加了一个意图,并且nwo调用它,从而引发扩展活动而不是基本活动。

感谢您的帮助球员。

+3

如何知道您是否不向我们展示您的代码? – 2011-06-10 19:40:47

+0

仍然需要查看更多代码以及如何调用它。 – Woot4Moo 2011-06-10 20:09:52

+0

它的一个菜单,我按菜单按钮 – 2011-06-10 20:12:56

回答

0

在导入中使用完全限定的名称我怀疑你引用了错误的类。

+0

如果我拿掉override类中的所有东西,只留下空括号,它可以在每个Base类中正常工作,因此引用工作正常。 – 2011-06-10 20:14:21

1

要么你没有代码复制并粘贴正确,或者是问题的一部分是在你的基地类,它提供了相同的定义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); 
} 
+0

是的,我没有正确地拷贝它,因为我已经修正了它 – 2011-06-10 20:26:58

+0

@Jason Carter:好的,你在'onCreateOptionsMenu'的基类定义中看起来像一个转录错误 - 看最后一行。 – 2011-06-10 20:33:19

+0

@Jason Carter:对于这个问题,'onOptionsItemSelected'中开关的最后两种情况是相同的。正如您现在可能已经发现的,直接复制粘贴比尝试重新输入代码要好得多:您提供的代码越精确,答案就越准确。 – 2011-06-10 20:37:23

0

原来,这是我调用活动的方式。我直接在库中调用Activity而不是调用覆盖的Activity。由于被覆盖的将根据应用程序命名而动态化,因此我最终使用Intents来搜索调用者程序包名称并将特定的意图附加到它上面。

只要我把所有的设置,我的短信菜单项显示。