在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制作。有人可以帮助我吗?
答案 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
}