我应该如何访问片段中的操作栏菜单项?我试过这个,但什么都没发生
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.menu_refresh:
Toast.makeText(getActivity().getApplicationContext(), "clicked", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
TeR*_*RRo 58
请遵循以下步骤:
在Fragment中添加setHasOptionsMenu(true)方法.
重写onCreateOptionsMenu(菜单菜单,MenuInflater打气筒)和onOptionsItemSelected(菜单项项目)在片段的方法.
里面的onOptionsItemSelected(菜单项项)活动的方法,请确保您返回false,如果菜单项行动将在onOptionsItemSelected(菜单项项)片段的方法来实现.
例:
活动
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.activity_menu_item:
// Do Activity menu item stuff here
return true;
case R.id.fragment_menu_item:
// Not implemented here
return false;
default:
break;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
分段
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
....
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
// Do something that differs the Activity's menu here
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.activity_menu_item:
// Not implemented here
return false;
case R.id.fragment_menu_item:
// Do Fragment menu item stuff here
return true;
default:
break;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
您无法直接访问片段中的ActionBar菜单项.你可以做的是把setHasOptionsMenu(true); 在片段类中的onCreateView函数中,这将调用相应活动中的onCreateOptionsMenu(菜单菜单)函数.
在那里,您可以访问操作栏中的所有菜单项.您可以使用:
MenuItem item = menu.getItem(index);
Run Code Online (Sandbox Code Playgroud)
你有一个使用它的例子:
在片段onCreateView类中:
setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)
在相应的活动类中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
MenuItem item = menu.getItem(0);
if(condition)
item.setVisible(true);
else
item.setVisible(false);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_logout:
makeLogout();
return true;
default :
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34927 次 |
| 最近记录: |