活动工具栏在Fragment中无法正常运行

时间:2016-02-26 07:04:54

标签: android android-fragments material-design toolbar android-appcompat

我正在使用NavigationDrawer和Fragments创建一个应用程序。我在Android Studio中创建了NavigationDrawer项目。在我的主要活动中,我添加了一个FrameLayout容器,该容器被一个片段替换。我有一个片段A,一旦MainActivity开始就会被充气。

问题: MainActivity的工具栏行为不正常。片段A中的视图不会检测工具栏,因此在MainActivity工具栏上检测到 重叠

另一个问题是工具栏 显示2个菜单 ,一个来自主要活动,另一个来自片段A.但是我只想显示来自片段A的菜单。

我能做些什么来解决它?

activity_main.xml中:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    />

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"
        android:visibility="visible"/>

</android.support.v4.widget.DrawerLayout>

fragment_a.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorAccent">

    </android.support.v7.widget.Toolbar>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="20dp">

    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@mipmap/ic_launcher"
        android:layout_centerHorizontal="true"/>

        <EditText
            android:id="@+id/edittext_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:hint="@string/email_hint" />



            <EditText
            android:id="@+id/edittext_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:hint="@string/password_hint" />

    <Button
        android:id="@+id/button_login"
        android:layout_below="@+id/layout_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:text="Login"/>
    </RelativeLayout>
</LinearLayout>

片段A.java

@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_login, container, false);
        setHasOptionsMenu(true);
        ButterKnife.bind(this, view);
        ((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
        mToolbar.setTitle("Login");

        Toast.makeText(getActivity(), "loginFragment", Toast.LENGTH_SHORT).show();
        return view;
    }


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.login_fragment_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_register) {
            mMainActivityInterface.onOpenRegisterFragmentButtonClicked();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

0 个答案:

没有答案