Java 如何使用带有AndroidAnnotations的自定义actionbar布局?

Java 如何使用带有AndroidAnnotations的自定义actionbar布局?,java,android,android-annotations,Java,Android,Android Annotations,如何使用带有AndroidAnnotations的自定义actionbar布局 有效的代码: @EActivity(R.layout.activity_register_classes) public class RegisterClassesActivity extends ActionBarActivity { @AfterViews void setupActionBar() { ActionBar actionBar = getSupportAction

如何使用带有AndroidAnnotations的自定义actionbar布局

有效的代码:

@EActivity(R.layout.activity_register_classes)
public class RegisterClassesActivity extends ActionBarActivity {

    @AfterViews
    void setupActionBar() {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setCustomView(R.layout.fragment_save_cancel_action_bar);

        findViewById(R.id.id_cancel).setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Toast.makeText(getBaseContext(), "Cancelando...", Toast.LENGTH_SHORT).show();
           }
        });
    }
}
但以下代码段没有:

@EActivity(R.layout.activity_register_classes)
public class RegisterClassesActivity extends ActionBarActivity {

    @AfterViews
    void setupActionBar() {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setCustomView(R.layout.fragment_save_cancel_action_bar);
    }

    @Click(R.id.id_save)
    void cancel() {
        Toast.makeText(getBaseContext(), "Cancel...", Toast.LENGTH_SHORT).show();
    }
}
我正在使用库的3.0.1版本。
Android API 19

我看到这个问题还有一些时间,我希望现在能有所帮助。所以我也遇到了这个问题,因为Android注释文档非常差。实际上,我必须解决这个问题两次,因为我的第一个解决方案在第一次点击时不起作用,我将在代码中对此进行解释

1.-首先要创建一个菜单,您必须在res/menu中这样做,让我们将其命名为“myactivity_menu.xml”,它应该是这样的(在创建活动时默认创建):

简单到只需在@EActivity下添加@options菜单,就可以看到您的菜单了

然而,这里有一个很好的观点,那么我如何使用菜单中的按钮或图标呢?这是一个非常好的问题,因为AndroidAnnotations文档对此不清楚,示例非常差,可能会导致混淆。这就是我们要做的:

3.-在这里,我们将为菜单项设置查找器:

   @OptionsItem(R.id.thisIsAnId)
    void whatEverToDoWithMyMenuItem() {
    }
这需要在下面有一个void方法,我认为这是AndroidAnnotations文档中对此的唯一正确指示

此代码可以放在@afterview下

然而,这仍然不清楚,因为AndroidAnnotation改变了源自onItem的Android逻辑。。。那么,如果我必须设置一个侦听器,会发生什么呢

我的错误是在我们刚刚创建的void方法中使用了正常的Android逻辑。那不行

4.-所以这一点很难,我们必须简单地添加我们想做的任何事情,因为我们都准备好了听众:

    @OptionsItem(R.id.thisIsAnId)
    void whatEverToDoWithMyMenuItem() {
      Toast toast = Toast.makeText(getApplicationContext(), "Sample Text",       
      Toast.LENGTH_LONG);
      toast.show();
    }
这里的诀窍是,当我们执行
@OptionsItem(R.id.thisIsAnId)
时,click的侦听器已设置为allready,因此我们可以在下面的void方法中执行我们想要的任何操作

如果出于某种原因,您在void方法中使用了一个警报并出现错误,请查看此问题,我的问题已通过使用


如果AndroidAnnotations的任何人正在阅读此文章,请改进您的文档。

您可以发布一个示例项目来重现此问题吗?我无法发布该项目,因为它是一个内部产品。但是上面的代码足以重现错误。我要求您发布一个示例项目。我可以从代码中创建它,但它需要额外的东西,代码本身是不够的……我是AndroidAnnotations开发人员。我们的医生少了什么?谢谢你的关心,我受了很多苦。我认为最友好的结构是WordPress抄本的使用。首先,定义代码的内容。在那之后,有几个例子。最后,您可能正在查找此部分。我要强调这些例子。要理解如何使用@OptionItem,还有一个问题没有得到解释,那就是它是一个好的监听器。在其他情况下,如使用服务,则从未详细说明。你必须做一些傻瓜式的文件。逐字写下“这应该放在X文件中,如果没有创建,现在就创建。把它放在Y下”谢谢你的反馈!我认为wiki在菜单主题上非常清楚:“
@OptionsItem
标记接收菜单选择事件的方法”。请注意,AA适用于已经熟悉Android API的开发人员。因此,
@OptionsItem
使用侦听器是很平常的。但是您可以随时查看生成的代码,这在AA中是一件非常棒的事情-没有魔法。在我看来,wiki是由AA开发人员编写的,而不是普通用户,因此我们可能会跳过一些对我们来说微不足道的信息。如果您有任何建议,请毫不犹豫地在聊天室或邮件列表中分享。谢谢您的关注。现在我明白了。那么,我想建议你重新关注每一位观众。原因很简单,AA比Android API更适合新手,更简单、更干净。我会留意你提到的频道。再次感谢你。希望你能为我这样的noobs改进你的wiki,它将帮助很多初学者开发。
   @OptionsItem(R.id.thisIsAnId)
    void whatEverToDoWithMyMenuItem() {
    }
    @OptionsItem(R.id.thisIsAnId)
    void whatEverToDoWithMyMenuItem() {
      Toast toast = Toast.makeText(getApplicationContext(), "Sample Text",       
      Toast.LENGTH_LONG);
      toast.show();
    }