android-fragments 奇怪的情形:在每个片段中显示来自MainActivity的文本

ttygqcqt  于 2022-11-13  发布在  Android
关注(0)|答案(1)|浏览(167)

我是新来的,我写这个问题是因为我正在为Android设备制作我的第一个应用程序。当然,我使用的是Android Studio。我的问题是:
我遇到了一个奇怪的情况:我在MainActivity中有一个带有欢迎用户的TextVield,当应用启动时,以及当我使用汉堡菜单导航到应用中的其他片段时,会显示该TextVield。每个片段中都可以看到来自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"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.menu_boczne">

    <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>

</manifest>
vybvopom

vybvopom1#

这很简单:你所做的是将fragment添加到你拥有的ConstraintLayout中。它不会删除你拥有的TextView,而只是在它后面添加fragment的UI元素。
您应该如何保留您的设计:
1.在TextBox之后添加另一个元素FrameLayout就可以了,并将您的id fragmentContent从您的ConstraintLayout移动到它

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <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" />

</android.support.constraint.ConstraintLayout>

1.向它进行交易,就像你已经在做的那样:

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

相关问题