具有公共工具栏和 menuItems 活动的 BaseActivity 无法捕获 onMenuItemClick
BaseActivity with common toolbar and menuItems activities can not catch onMenuItemClick
我有基础 activity,所有工具栏初始化和选项菜单都已完成,扩展基础的活动无法触发 onitemclick
在基地我有
public class BaseActivity extends AppCompatActivity {
private MenuItem refresh;
public Toolbar getToolbar() {
return toolbar;
}
public MenuItem getRefresh() {
return refresh;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
refresh = menu.findItem(R.id.action_refresh);
refresh.setActionView(R.layout.menu_item_view);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
}
return false;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
switch (mState) {
case Const.STATE_IDLE:
refresh.setVisible(true);
break;
case STATE_WORKING:
refresh.setVisible(false);
break;
default:
refresh.setVisible(true);
break;
}
return super.onPrepareOptionsMenu(menu);
}
}
在其中一项活动中,我处理它的方式是
public class CommentsActivity extends BaseToolbarActivity
{
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if(item.getItemId() == R.id.action_refresh){
setState(Const.STATE_WORKING);
showMsg(contentRoot,"oops");
return true;
}
return super.onOptionsItemSelected(item);
}
}
但点击项目不会触发
过了一会儿我意识到,因为我正在为我的项目设置自定义布局(对动画有用),所以带有自定义视图的选项菜单可以在 xml 中设置或动态使用
item.setActionView(R.layout.menu_lay);
就像我上面的问题菜单项永远不会被普通的 onOptionsItemSelected 侦听器调用所以让它工作的方法是在项目的自定义视图上实现 onClickListener 所以在我的情况是调用它的方法是
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getRefresh.getActionView().setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//refresh some data
}
});
return true;
}
我有基础 activity,所有工具栏初始化和选项菜单都已完成,扩展基础的活动无法触发 onitemclick
在基地我有
public class BaseActivity extends AppCompatActivity {
private MenuItem refresh;
public Toolbar getToolbar() {
return toolbar;
}
public MenuItem getRefresh() {
return refresh;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
refresh = menu.findItem(R.id.action_refresh);
refresh.setActionView(R.layout.menu_item_view);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
}
return false;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
switch (mState) {
case Const.STATE_IDLE:
refresh.setVisible(true);
break;
case STATE_WORKING:
refresh.setVisible(false);
break;
default:
refresh.setVisible(true);
break;
}
return super.onPrepareOptionsMenu(menu);
}
}
在其中一项活动中,我处理它的方式是
public class CommentsActivity extends BaseToolbarActivity
{
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if(item.getItemId() == R.id.action_refresh){
setState(Const.STATE_WORKING);
showMsg(contentRoot,"oops");
return true;
}
return super.onOptionsItemSelected(item);
}
}
但点击项目不会触发
过了一会儿我意识到,因为我正在为我的项目设置自定义布局(对动画有用),所以带有自定义视图的选项菜单可以在 xml 中设置或动态使用
item.setActionView(R.layout.menu_lay);
就像我上面的问题菜单项永远不会被普通的 onOptionsItemSelected 侦听器调用所以让它工作的方法是在项目的自定义视图上实现 onClickListener 所以在我的情况是调用它的方法是
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getRefresh.getActionView().setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//refresh some data
}
});
return true;
}