AndroidAnnotations。按钮单击menuItem的actionLayout

时间:2015-01-26 09:56:13

标签: android android-appcompat android-menu android-annotations

在AA + AppCompat中,我尝试将Activity中的以下代码更改为AA样式。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.menu_done, menu);
    MenuItem menuItem = menu.findItem(R.id.itemDone);
    View menuView = MenuItemCompat.getActionView(menuItem);
    mButtonQuestionPost = (Button) menuView.findViewById(R.id.buttonMenuDone);
    mButtonQuestionPost.setOnClickListener(this);

    return super.onCreateOptionsMenu(menu);
}

首先,改变活动的主管,如下所示。菜单按预期显示。

@EActivity(R.layout.activity_question_post)
@OptionsMenu(R.menu.menu_done)
public class QuestionPostActivity extends FragmentActivity {...

然后,尝试按下按钮点击方法,但没有解雇。我用@Click更改了@OptionsItem或更改了此属性,但没有运气。

@Click(R.id.buttonMenuDone)
void buttonMenuDone(){
    if (mQuestionPostFragment.validatePost()) {
        setSupportProgressBarIndeterminate(true);
        mQuestionPostFragment.postQuestion();
    }
}

menu.xml 如下所示。请注意,我使用actionLayout进行设计。

<item
    android:id="@+id/itemDone"
    android:title="@string/done"
    app:showAsAction="always"
    android:menuCategory="system"
    app:actionLayout="@layout/item_menu_done"
    />

item_menu_done 如下所示。

<Button
    android:layout_width="48dp"
    android:layout_height="?actionBarSize"
    android:id="@+id/buttonMenuDone"
    android:text="@string/done"
    android:textColor="@android:color/white"
    android:textSize="14sp"
    android:background="?attr/actionBarItemBackground"
    />

AA生成的文件没有MenuItemCompat.getActionView(menuItem),但很难用AA制作。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

我担心你无法将@Click的监听器绑定到菜单操作视图,因为Activity.findViewById无法在菜单项中找到该视图。您可以做的是注入menuitem,然后手动绑定您的监听器。

@EActivity(R.layout.activity_question_post)
@OptionsMenu(R.menu.menu_done)
public class QuestionPostActivity extends FragmentActivity {

    @OptionsMenuItem(R.id.menuItemDone)
    MenuItem buttonMenuDone;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // this will be called by the generated subclass after it injected the menu
        MenuItemCompat.getActionView(itemDone).findViewById(R.id.buttonMenuDone).setOnClickListener(this);
        return true;
    }
}

答案 1 :(得分:0)

如果有人需要它,现在你可以像这样使用OptionsItem()注释:

//Even with system items
@OptionsItem(android.R.id.home)
void onHomeItemClicked() {
    finish();
}

//Or your custom ones
@OptionsItem(R.id.buttonMenuDone)
void onMenuDoneItemClicked() {
    //Do your stuff
}