我是新来的,我正在写这个问题,因为我正在为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>
提前谢谢!
答案 0 :(得分:0)
这很简单:您正在做的就是在您拥有的ConstraintLayout
中添加片段。它不会删除您拥有的TextView
,而只是在其后添加fragment的UI元素。
要保留您的设计应该做什么:
添加另一个元素,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" />
进行交易,就像您已经在做的一样:
fragmentManager.beginTransaction().replace(R.id.fragmentContent, mfragment).addToBackStack(null).commit();