安卓注解。在 menuItem 的 actionLayout 中单击按钮
AndroidAnnotations. button click inside actionLayout of menuItem
在 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);
}
首先,将Activity的头部改成如下。菜单按预期显示。
@EActivity(R.layout.activity_question_post)
@OptionsMenu(R.menu.menu_done)
public class QuestionPostActivity extends FragmentActivity {...
并且,尝试执行如下按钮单击方法但没有触发。我用 @OptionsItem
更改了 @Click
或更改了这个那个的属性,但没有成功。
@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生成。有人可以帮我吗?
恐怕您无法将具有 @Click
的侦听器绑定到菜单操作视图,因为 Activity.findViewById
在菜单项中找不到该视图。你可以做的是注入菜单项,然后像你已经做的那样手动绑定你的监听器。
@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;
}
}
如果有人需要它,现在您可以像这样使用 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
}
在 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);
}
首先,将Activity的头部改成如下。菜单按预期显示。
@EActivity(R.layout.activity_question_post)
@OptionsMenu(R.menu.menu_done)
public class QuestionPostActivity extends FragmentActivity {...
并且,尝试执行如下按钮单击方法但没有触发。我用 @OptionsItem
更改了 @Click
或更改了这个那个的属性,但没有成功。
@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生成。有人可以帮我吗?
恐怕您无法将具有 @Click
的侦听器绑定到菜单操作视图,因为 Activity.findViewById
在菜单项中找不到该视图。你可以做的是注入菜单项,然后像你已经做的那样手动绑定你的监听器。
@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;
}
}
如果有人需要它,现在您可以像这样使用 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
}