一、重叠Fragment
(一)错误说明
在替换其他Fragment时,最初的Fragment仍然显示,导致两个Fragment发生重叠!
(二)显示效果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5aabf76aa096a15ea959ba61efcd5e18.png)
二、解决思路
先隐藏当前显示的Fragment,然后显示替换的Fragment!!
三、解决代码
(一)布局文件
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/ll_switch"/>
<LinearLayout
android:id="@+id/ll_switch"
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal"
android:background="
android:layout_alignParentBottom="true">
<ImageButton
android:id="@+id/image1"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_weight="1"
android:clickable="true"
android:background="
<ImageButton
android:id="@+id/image2"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_weight="1"
android:clickable="true"
android:background="
</LinearLayout>
</RelativeLayout>
2.blank_fragment.xml【第一个Fragment】
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BlankFragment">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello"
android:textSize="30sp"
android:textColor="@android:color/holo_red_light"/>
</FrameLayout>
3.blank_fragment2_fragment.xml【第二个Fragment】
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BlankFragment">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello"
android:textSize="30sp"
android:textColor="@android:color/holo_red_light"/>
</FrameLayout>
(二)Java代码
1.MainActivity.java
package com.example.fragment;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import com.bumptech.glide.Glide;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private FragmentTransaction ft;
private BlankFragment blankFragment;
private BlankFragment2 blankFragment2;
private ImageButton button1;
private ImageButton button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
return;
}
initView();
}
private void initView() {
button1 = (ImageButton) findViewById(R.id.image1);
Glide.with(MainActivity.this).load(R.mipmap.notice).into(button1);
button2 = (ImageButton) findViewById(R.id.image2);
Glide.with(MainActivity.this).load(R.mipmap.nets).into(button2);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
blankFragment = BlankFragment.newInstance();
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container,blankFragment).commit();
}
private void hideFragment() {
ft = getSupportFragmentManager().beginTransaction();
if (blankFragment != null && blankFragment.isVisible()) {
ft.hide(blankFragment);
}
if (blankFragment2 != null && blankFragment2.isVisible()) {
ft.hide(blankFragment2);
}
ft.commit();
}
@Override
public void onClick(View v) {
hideFragment();
ft = getSupportFragmentManager().beginTransaction();
switch (v.getId()) {
case R.id.image1:
if (blankFragment == null) {
blankFragment = BlankFragment.newInstance();
ft.add(R.id.container,blankFragment).commit();
}else {
ft.show(blankFragment).commit();
}
break;
case R.id.image2:
if (blankFragment2 == null) {
blankFragment2 = BlankFragment2.newInstance();
ft.add(R.id.container,blankFragment2).commit();
}else {
ft.show(blankFragment2).commit();
}
break;
default:
break;
}
}
}
2.BlankFragment.java
package com.example.fragment;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class BlankFragment extends Fragment {
public static BlankFragment newInstance() {
return new BlankFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
Log.e("BlankFragment","调用onCreateView");
return inflater.inflate(R.layout.blank_fragment, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
Log.e("BlankFragment","调用onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
}
3.BlankFragment2.java
package com.example.fragment;
import androidx.lifecycle.ViewModelProviders;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.w3c.dom.Text;
public class BlankFragment2 extends Fragment {
public static BlankFragment2 newInstance() {
return new BlankFragment2();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
Log.e("BlankFragment2","调用onCreateView");
return inflater.inflate(R.layout.blank_fragment2_fragment, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
Log.e("BlankFragment2","调用onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
}