首页 文章

如何从片段中删除操作栏?

提问于
浏览
0

主要活动:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayUseLogoEnabled(true);
        getSupportActionBar().setCustomView(R.layout.action_bar_layout);
        getSupportActionBar().setDisplayShowCustomEnabled(true);
        MedSectionFragment medSectionFragment = (MedSectionFragment)getSupportFragmentManager().findFragmentByTag("medSectionFragment");
        if (medSectionFragment == null){
            medSectionFragment = new MedSectionFragment();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.add(android.R.id.content, medSectionFragment, "medSectionFragment");

            // transaction.addToBackStack(null);
            transaction.commit();
          }
    }

第一片段:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
        //Inflate the fragment layout file
        ViewGroup rootView=(ViewGroup)inflater.inflate(R.layout.med_sections_list, container, false);
}

第二片段:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState) {
        //Inflate the fragment layout file
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.official_name_list, container, false);
}

在从一个片段(类别)转换到另一个(子类别)之后,我们有listview和actionbar . 这是真的 .
enter image description here

但是当我转换到第三个片段时(详细信息)

public class DetailMedicineFragment extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.detail_medicine_fragment, container, false);
        return rootView;
    }
      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          Toolbar toolbar = (Toolbar)getActivity().findViewById(R.id.mToolbar);
          ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
      }

发生错误

java.lang.IllegalStateException:此Activity已经有一个由窗口装饰提供的操作栏 . 不要在主题中请求Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false以使用工具栏 . 在android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:198)的android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99)at ua.edu.sumdu.medmaterialdesign.DetailMedicineFragment.onActivityCreated (DetailMedicineFragment.java:41)位于android.support的android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1970)的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1092) . 在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java)的android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)上的v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 1613)在android.os.Handler.dispatchMessage(Handler.java)的android.os.Handler.handleCallback(Handler.java:739)的android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:517) 95)在android.app.Looper.loop(Looper.java:211)android.app.ActivityThread.main(ActivityThread.java: 5389)at java.lang.reflect.Method.invoke(Native Method)at java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit . java:1020)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

应用风格

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

1 回答

  • 1

    此活动已经有一个由窗口装饰提供的操作栏 . 不要在主题中请求Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false以使用工具栏代替

    由于这个问题已经有了答案(以上记录)而你之前就已经这样做了,所以应该用这两个来完成:

    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item>
    

    而且,既然你已经添加了 Toolbar ,请确保 ActivityStyles 父级是:

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    

    重点是: NoActionBar . (就像我猜的那样,你使用 DarkActionBar

    另外:Difference and uses of onCreate(), onCreateView() and onActivityCreated() in fragments

    onActivityCreated():正如名称所述,这是在Activity的onCreate()完成后调用的 . 它在onCreateView()之后调用,主要用于最终初始化(例如,修改UI元素) .

    听起来不错,但是,在 onCreate 上使用它会怎么样?

    getActivity().getSupportActionBar().hide()
    

    它应该隐藏 ActionBar .

    但是,关于这一行:

    ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
    

    我认为问题出在 AppCompatActivity ,你在_1113031中使用它我想 .

    请参阅:如何从片段中获取工具栏?这个答案:https://stackoverflow.com/a/26998718/4409113

    类似于它的东西试图从那个 Activity 投射而不仅仅是为了 Fragment .


    你说: How to remove action bar from fragment?

    问题是,你为什么试图获得 Toolbar 呢?

    请记住, Fragments 没有 Actionbars/ToolbarsActivities .

    http://developer.android.com/guide/components/fragments.html

相关问题