奇怪的情况:来自 MainActivity 的文本显示在每个片段中
Strange situation: text from MainActivity being shown in every fragment
我是新来的,我正在写这个问题,因为我正在为 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>
提前致谢!
这很简单:您正在做的是将片段添加到您拥有的 ConstraintLayout
中。它不会删除您拥有的 TextView
,而只是在其后添加片段的 UI 元素。
您应该如何保留您的设计:
添加另一个元素,FrameLayout
就可以了,之后 TextBox
并将您的 id fragmentContent
从您的 ConstraintLayout
[=18 移动到它=]
<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" />
对其进行交易,就像您已经在做的那样:
fragmentManager.beginTransaction().replace(R.id.fragmentContent, mfragment).addToBackStack(null).commit();
我是新来的,我正在写这个问题,因为我正在为 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>
提前致谢!
这很简单:您正在做的是将片段添加到您拥有的 ConstraintLayout
中。它不会删除您拥有的 TextView
,而只是在其后添加片段的 UI 元素。
您应该如何保留您的设计:
添加另一个元素,
FrameLayout
就可以了,之后TextBox
并将您的 idfragmentContent
从您的ConstraintLayout
[=18 移动到它=]<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" />
对其进行交易,就像您已经在做的那样:
fragmentManager.beginTransaction().replace(R.id.fragmentContent, mfragment).addToBackStack(null).commit();