如何从 Android 上的片段访问 ActionBar
How access ActionBar from fragment on Android
在我的应用程序中,我只有一个 activity(扩展 ActionBarActivity )和各种片段(扩展片段)。
当用户单击菜单选项时,应用程序会更改 Fragment。
此时我想更改标题和 ActionBar 的背景颜色。
当我尝试 ActionBar actionBar = getActivity().getActionBar();
时,我得到了一个空异常。
我正在使用支持库,并且在 Activity 我正在 android.support.v7.app.ActionBar actionBar = getSupportActionBar();
成功使用。
关于片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.material_cadastro, container, false);
viewHolder = new MaterialViewHolder(view);
ActionBar actionBar = getActivity().getActionBar();
actionBar.setTitle(R.string.inserir_material);
return view;
}
调试我得到 Activity 返回正常,但 ActionBar 为空:
getActivity() = {br.com.americocarelli.vendasfacil.ui.MenuPrincipal@3b56766f}
getActivity().getActionBar() = null
既然你使用了支持库(ActionBarActivity),那么使用((ActionBarActivity)getActivity()).getSupportActionBar();
来访问支持操作栏。
您可能正在使用 >=21 的构建工具构建它,该版本导致 activity.getActionBar() returns 无效,您应该改用 getSupportActionBar()。
编辑:如果您恰好在这一行获得 NPE:getActivity()。 ... 那么您可能在将片段附加到 activity 之前或之后引用它。您能否粘贴您正在使用它的上下文(位置,在什么功能中)?
覆盖你的 onAttach(Activity)
,然后将你的 Activity
转换为 ActionBarActivity
,你可以获得 ActionBar
。
喜欢:
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
ActionBar actionBar=((ActionBarActivity)activity).getSupportActionBar();
}
在我的应用程序中,我只有一个 activity(扩展 ActionBarActivity )和各种片段(扩展片段)。
当用户单击菜单选项时,应用程序会更改 Fragment。
此时我想更改标题和 ActionBar 的背景颜色。
当我尝试 ActionBar actionBar = getActivity().getActionBar();
时,我得到了一个空异常。
我正在使用支持库,并且在 Activity 我正在 android.support.v7.app.ActionBar actionBar = getSupportActionBar();
成功使用。
关于片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.material_cadastro, container, false);
viewHolder = new MaterialViewHolder(view);
ActionBar actionBar = getActivity().getActionBar();
actionBar.setTitle(R.string.inserir_material);
return view;
}
调试我得到 Activity 返回正常,但 ActionBar 为空:
getActivity() = {br.com.americocarelli.vendasfacil.ui.MenuPrincipal@3b56766f}
getActivity().getActionBar() = null
既然你使用了支持库(ActionBarActivity),那么使用((ActionBarActivity)getActivity()).getSupportActionBar();
来访问支持操作栏。
您可能正在使用 >=21 的构建工具构建它,该版本导致 activity.getActionBar() returns 无效,您应该改用 getSupportActionBar()。 编辑:如果您恰好在这一行获得 NPE:getActivity()。 ... 那么您可能在将片段附加到 activity 之前或之后引用它。您能否粘贴您正在使用它的上下文(位置,在什么功能中)?
覆盖你的 onAttach(Activity)
,然后将你的 Activity
转换为 ActionBarActivity
,你可以获得 ActionBar
。
喜欢:
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
ActionBar actionBar=((ActionBarActivity)activity).getSupportActionBar();
}