【问题标题】:setHomeButtonEnabled on toolbar in a fragment片段中工具栏上的 setHomeButtonEnabled
【发布时间】:2015-05-29 20:47:39
【问题描述】:
Android studio 1.3
com.android.support:appcompat-v7:22.1.1

你好,

我正在使用新的工具栏并显示在我的片段中。但是,我希望能够通过setHomeButtonEnabled(true) 导航回上一个片段。但是,在我的 onCreateView 片段中没有这样的功能。这在 Activity 中有效,但在片段中无效。

是否有让工具栏显示 setHomeButtonEnabled 以便显示箭头以便用户可以导航回来。

public class FileTransferFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setHasOptionsMenu(true);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_file_transfer, container, false);

        final Toolbar toolbar = (Toolbar)view.findViewById(R.id.app_bar);
        AppCompatActivity appCompatActivity = (AppCompatActivity)getActivity();
        appCompatActivity.setSupportActionBar(toolbar);

    /* TRIED THIS BUT DIDN'T WORK */
        appCompatActivity.getActionBar().setHomeButtonEnabled(true);
        appCompatActivity.getActionBar().setDisplayHomeAsUpEnabled(true);
        return view;
    }
}

在我的活动中,我正在扩展 AppCompatActivity 并使用 appcompat-v7:22.1.1

public class FileTransferActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_transfer);

        if(savedInstanceState == null) {
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.add(R.id.fragment_container,
                    FileTransferFragment.getFileTransferFragment(1234), "FileTransferFragment");
            fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            fragmentTransaction.commit();
        }
    }
}

正如您在图片中看到的那样,工具栏左侧没有箭头可让用户向后导航。

【问题讨论】:

  • 在 Fragment 的父 Activity 中设置操作栏,而不是在 onCreateView 中。要在片段中获取操作栏,请在 onActivityCreated() 内部使用此 ((AppCompatActivity)getActivity()).getSupportActionBar() ,然后您可以自定义它。
  • 你能告诉我......对于actionBar......你在使用工具栏小部件吗?还是不行?
  • 我正在使用 support-v7-widget-toolbar
  • 我已经给出了解决方案,试试吧.. 100% 有效!

标签: android android-fragments android-toolbar


【解决方案1】:

使用

   appCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

而不是

   appCompatActivity.getActionBar().setDisplayHomeAsUpEnabled(true);

【讨论】:

  • 感谢您解决了我的问题。只是一个快速的问题。为什么 AppCompactActivity 需要强制转换。当 getActivity() 返回 AppCompactActivity 是其子类的 FragmentActivity 时?希望你能理解。谢谢。
【解决方案2】:

如果您在片段中启用了 actionBar,这是一件好事。目前,navigationDrawer 图标,称为汉堡图标,如果要启用它, 您需要在片段中使用以下方法。

首先创建实例。

private ActionBarDrawerToggle drawerToggle;
private DrawerLayout mDrawerLayout;

您需要以上实例。

drawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close){

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            //Todo
            //you don't have to write here anything to enable icon
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            //Todo
            //you dont have to write here anything to enable icon
        }

    };
    mDrawerLayout.setDrawerListener(drawerToggle); 

在此之后,您的片段应该有某种方式在抽屉关闭或打开时通知 mainActivity 你可以通过 syncState() 方法做到这一点。

    mDrawerLayout.post(new Runnable(){

        @Override
        public void run(){
            //enable hamburger icon
            drawerToggle.syncState();
        }

    });

您可以在片段中将整体实现为单独的方法并从 main 调用。

阅读此处的文档以获取更多信息。关于全班

ActionBarDrawerToggle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多