不同选项卡的不同操作栏项目,Actionbarsherlock
Different actionbar item for different tabs, Actionbarsherlock
我有一个 class 它扩展了 SherlockFragment,它有一个 actionbarItem "filter"
TabbedFragment.java
public class TabbedFragment extends SherlockFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.activity,container, false);
mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);
mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("TAB 1"),
Tab1.class, null);
mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("TAB 2"),
Tab2.class, null);
for(int i=0;i<mTabHost.getTabWidget().getChildCount();i++)
{
TextView tv = (TextView) mTabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(Color.parseColor("#ffffff"));
}
return rootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.post_filter, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuOption_filter:
// To-Do
default:
break;
}
return true;
}
}
我有两个选项卡,都扩展了 ListFragment
Tab1.java:
public class Tab1 extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// TO-DO
}
}
Tab2.java:
public class Tab2 extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// TO-DO
}
}
这将像这样创建 ActionBar:
---------------------
| Filter | <--- ActionBarItem
---------------------
| TAB1 | TAB2 |
---------------------
现在我只想在用户使用 TAB1 时显示过滤器,而当用户选择 TAB2 时,应该隐藏 "filter"。
我试过的解决方案:
我没有在 "TabbedFragment" class 中创建菜单,而是在 Tab1 中创建了一个菜单,但未调用 Tab1 中的 onCreateOptionsMenu() 方法(我尝试了 setHasOptionsMenu(true) 在 OnCreate( ) 的 Tab1,仍然没有运气)
P.S。 TabbedFragment class 扩展 SherlockFragment,我不想用 Activity/SherlockFragmentActivity.
扩展它
请帮助!!!
该流程应该确实有效,否则您可以使用变通方法来操作菜单。
- 将 OnTabChangeListener 添加到您的选项卡主机
- 保存选中的标签状态
- 调用 invalidateOptionsMenu()
- 将调用 onCreateOptionsMenu 方法
- 根据所选选项卡,管理您的菜单项可见性
我有一个 class 它扩展了 SherlockFragment,它有一个 actionbarItem "filter"
TabbedFragment.java
public class TabbedFragment extends SherlockFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.activity,container, false);
mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);
mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("TAB 1"),
Tab1.class, null);
mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("TAB 2"),
Tab2.class, null);
for(int i=0;i<mTabHost.getTabWidget().getChildCount();i++)
{
TextView tv = (TextView) mTabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(Color.parseColor("#ffffff"));
}
return rootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.post_filter, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuOption_filter:
// To-Do
default:
break;
}
return true;
}
}
我有两个选项卡,都扩展了 ListFragment
Tab1.java:
public class Tab1 extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// TO-DO
}
}
Tab2.java:
public class Tab2 extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// TO-DO
}
}
这将像这样创建 ActionBar:
---------------------
| Filter | <--- ActionBarItem
---------------------
| TAB1 | TAB2 |
---------------------
现在我只想在用户使用 TAB1 时显示过滤器,而当用户选择 TAB2 时,应该隐藏 "filter"。
我试过的解决方案:
我没有在 "TabbedFragment" class 中创建菜单,而是在 Tab1 中创建了一个菜单,但未调用 Tab1 中的 onCreateOptionsMenu() 方法(我尝试了 setHasOptionsMenu(true) 在 OnCreate( ) 的 Tab1,仍然没有运气)
P.S。 TabbedFragment class 扩展 SherlockFragment,我不想用 Activity/SherlockFragmentActivity.
扩展它请帮助!!!
该流程应该确实有效,否则您可以使用变通方法来操作菜单。
- 将 OnTabChangeListener 添加到您的选项卡主机
- 保存选中的标签状态
- 调用 invalidateOptionsMenu()
- 将调用 onCreateOptionsMenu 方法
- 根据所选选项卡,管理您的菜单项可见性