android navigationLayout使用headerview无法在Fragment

时间:2016-12-27 03:42:21

标签: android

我自定义了DrawerLayout HeaderView,当我点击HeaderView上的按钮时,它无法关闭抽屉,就像点击抽屉菜单上的按钮一样。

我尝试在官方演示中使用,它也是一样。

所以我只需创建一个新类BackListener来覆盖onBackPress(); 只是在我的按钮中新建它,它也不起作用。

有解决方案的人请告诉我。我将不胜感激。

DrawerLayout活动:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.user.taiwandigestionsociety_v11.MainActivity">


    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF">



        <android.support.v7.widget.Toolbar
            android:id="@+id/toolBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlways"
            android:background="@color/colorPrimary">
        </android.support.v7.widget.Toolbar>

        <FrameLayout
            android:id="@+id/mainFrame"
            android:layout_gravity="end"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>


    </android.support.design.widget.AppBarLayout>


    <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:background="#01000000"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/drawer_menu">
    </android.support.design.widget.NavigationView>

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

HeaderView布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:background="#66CDAA"
        android:orientation="vertical">


        <ImageView
            android:id="@+id/imageView3"
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/ic_grid_on_black_24dp" />

        <TextView
            android:id="@+id/logIn"
            android:textSize="15dp"
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/pageLogIn"
            android:textColor="@android:color/background_light"/>

        <Button
            android:id="@+id/logOut"
            android:layout_marginLeft="15dp"
            android:layout_width="60dp"
            android:layout_height="38dp"
            android:text="@string/logOut" />

    </LinearLayout>

</LinearLayout>

我尝试了这个方法:

public class BackListener extends AppCompatActivity {
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            System.out.println("back   onKeyDown()");
            return false;
        }else {
            return super.onKeyDown(keyCode, event);
        }

    }
}

MainActivity

logIn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        switchFragment(LogInFragment.newInstance());
        new BackListener();
    }
});

0 个答案:

没有答案