奇怪的情况:每个片段中都显示了MainActivity的文本

时间:2018-08-16 10:40:24

标签: java android android-fragments textfield main-activity

我是新来的,我正在写这个问题,因为我正在为Android设备制作第一个应用程序。我当然使用Android Studio。我的问题是:

我遇到一个奇怪的情况:我在MainActivity中有一个欢迎用户的TextVield,它在应用启动时以及当我使用Hamburger Menu导航到我的其他片段时显示应用程序中,MainActivity中的文本在每个片段中都可见。汉堡本身工作正常。我该怎么做才能解决此问题?

这是我的代码的一部分-我认为很关键,但是我不确定100%,因为我是Android和Java的新手。

//这来自MainActivity.java:

public void selectedtMenuItem(MenuItem menuItem)
    {
        android.support.v4.app.Fragment mfragment= null;
        Class fragmentClass;

        switch (menuItem.getItemId())
        {
            case R.id.main:
                fragmentClass = main.class;    
                break;
            case R.id.menu:
                fragmentClass = menu.class;    
                break;
            case R.id.galery:
                fragmentClass = galery.class;  
                break;
            case R.id.contact:
                fragmentClass = contact.class;  
                break;
            default:
                fragmentClass = main.class;   
        }
        try
        {
            mfragment= (android.support.v4.app.Fragment) fragmentClass.newInstance();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();

        fragmentManager.beginTransaction().replace(R.id.fragmentContent, mfragment).addToBackStack(null).commit();
        menuItem.setChecked(true);
        setTitle(menuItem.getTitle());
        mlayout.closeDrawers();

    }

    private void setContent (NavigationView navigationView)
    {
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener()
        {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item)
            {
                selectedtMenuItem(item);
                return false;
            }
        });
    }

//这来自activity_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main_activity"
    tools:context=".MainActivity">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragmentContent" >

        <TextView
            android:id="@+id/welcome"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
         />


    </android.support.constraint.ConstraintLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nawigacja"
        app:headerLayout="@layout/header"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@color/white"
        app:itemTextColor="@color/black"
        app:itemIconTint="#303F9F"
        app:menu="@menu/drawermenu"
        android:layout_gravity="start">
    </android.support.design.widget.NavigationView>

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

//也许AndroidManifest.xml会很有用:

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/icon"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/logo"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

提前谢谢!

1 个答案:

答案 0 :(得分:0)

这很简单:您正在做的就是在您拥有的ConstraintLayout中添加片段。它不会删除您拥有的TextView,而只是在其后添加fragment的UI元素。

要保留您的设计应该做什么:

  1. 添加另一个元素,FrameLayout将执行此操作,然后TextBox并将您的ID fragmentContent从您的ConstraintLayout移至该元素

    <TextView
        android:id="@+id/welcome"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp" />
    
     <FrameLayout
        android:id="@+id/fragmentContent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

  2. 进行交易,就像您已经在做的一样:

    fragmentManager.beginTransaction().replace(R.id.fragmentContent, mfragment).addToBackStack(null).commit();