用MainPage替换Fragment

时间:2015-11-24 06:03:57

标签: android android-fragments

我实现了以下布局,即主页。并且还实现了导航侧菜单。

我的问题是,当用户点击侧面(导航抽屉)菜单时,我希望当前的主页应该替换为所选的片段。但是在我目前的实现中,我仍然可以看到主页图像和textview以及我选择的片段textview。

main.xml中

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- The first child in the layout is for the main Activity UI-->
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="#ffffffff"
    android:id="@+id/content_frame">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Holy Operating Systems, Batdroid!"
        android:textSize="24sp"
        android:gravity="center"
        android:layout_marginTop="100dp"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/blue"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

<!-- Side navigation drawer UI -->
<ListView
    android:id="@+id/navList"
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start"
    android:background="#ffeeeeee"/>

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

Main.java

private void addDrawerItems() {
        String[] osArray = {"Login or SignUp","Post New Offer", "Home" };
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, osArray);
        mDrawerList.setAdapter(mAdapter);
        mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Fragment newFragment;
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                switch (position){
                    case 0:
                        newFragment = new Login ();
                        transaction.replace(R.id.content_frame, newFragment);
                        transaction.addToBackStack(null);
                        transaction.commit();
                        break;

                    case 1:
                        newFragment = new PostNewOffer();
                        transaction.replace(R.id.content_frame, newFragment);
                        transaction.addToBackStack(null);
                        transaction.commit();
                        break;

                    case 2:
                        newFragment = new TabFragment3();
                        transaction.replace(R.id.content_frame, newFragment);
                        transaction.addToBackStack(null);
                        transaction.commit();
                        break;
                }
                mDrawerLayout.closeDrawer(mDrawerList);
            }
         });
       }

这是我的 FragmentLayout.xml

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

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Login"
        android:textAppearance="?android:attr/textAppearanceLarge"/>

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

content_frame必须是像FrameLayout一样的空视图。您可以像这样更改布局:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="#ffffffff">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Holy Operating Systems, Batdroid!"
        android:textSize="24sp"
        android:gravity="center"
        android:layout_marginTop="100dp"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/blue"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"/>
    <!-- the fragment holder -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

答案 1 :(得分:0)

我建议注释掉这一行:

transaction.addToBackStack(null);

并在列表视图标记中替换此行:

android:layout_gravity="left|start" 

使用:

android:gravity="left|start"