Fragment 二
今天继续接着学习Fragment
今天学习了Fragment的增删改查
三种添加方式,一种替换,一种删除,两种隐藏,两种显现。
代码如下:
主要把改过的代码发一下,上个博客中之前的部分。
ModifyFragmentActivity
package com.example.fragment.modify; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.example.fragment.GlobalConstants; import com.example.fragment.R; import com.example.fragment.fragment.DynameicFragment; public class ModifyFragmentActivity extends AppCompatActivity { //声明tag private static final String TAG = GlobalConstants.TAG;//logt快速生成 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_modify_fragment); } public void addFragment1(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.fcv, DynameicFragment.class, null,"MyFragment") .commit() ; //点击一次有一个fragment } public void addFragment2(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.fcv, DynameicFragment.class, null) .addToBackStack("myBackStack")//后台栈中 .setReorderingAllowed(true) .commit() ; } public void addFragment3(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); DynameicFragment dynameicFragment = new DynameicFragment(); //传参数的话可以通过构造函数传入 fragmentTransaction.add(R.id.fcv, dynameicFragment) .commit() ; } public void findFragmentById(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); Fragment fragment = fragmentManager.findFragmentById(R.id.fcv); if (fragment != null) { Toast.makeText(this, "找到了Fragment" + fragmentManager.toString(), Toast.LENGTH_SHORT).show(); Log.d(TAG, "findFragmentById: \"找到了Fragment\" + fragmentManager.toString()");//小写logd快速出 } else { Toast.makeText(this, "没找到Fragment" + fragmentManager.toString(), Toast.LENGTH_SHORT).show(); Log.d(TAG, "findFragmentById: \"即将移除Fragment\" ");//小写logd快速出 } } public void findFragmentByTag(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); Fragment fragment = fragmentManager.findFragmentByTag("MyFragment"); if (fragment != null) { Toast.makeText(this, "找到了Fragment" + fragmentManager.toString(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "没找到Fragment" + fragmentManager.toString(), Toast.LENGTH_SHORT).show(); } } public void removeFragment(View view) {//后台栈的不会删除,相当于隐藏,按返回键才会删除 FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment fragment = fragmentManager.findFragmentById(R.id.fcv); if (fragment != null) { Toast.makeText(this, "找到了Fragment,并成功移除" + fragmentManager.toString(), Toast.LENGTH_SHORT).show(); Log.d(TAG, "findFragmentById: \"即将移除Fragment\" ");//小写logd快速出 fragmentTransaction.remove(fragment).commit(); } else { Toast.makeText(this, "没找到Fragment" + fragmentManager.toString(), Toast.LENGTH_SHORT).show(); Log.d(TAG, "findFragmentById: \"即将移除Fragment\" ");//小写logd快速出 } } public void replaceFragment(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); DynameicFragment dynameicFragment = new DynameicFragment(); Bundle bundle = new Bundle(); //将ARG_PARAM1改为public 或者bundle.putString("param1","要输入的文字"); bundle.putString(DynameicFragment.ARG_PARAM1,"这是新替换的Fragment");//做个标记 dynameicFragment.setArguments(bundle); fragmentTransaction.replace(R.id.fcv,dynameicFragment).commit(); } public void hideFragment(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment fragment = fragmentManager.findFragmentById(R.id.fcv); if(fragment!=null){ fragmentTransaction.hide(fragment).commit(); } } public void showFragment(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment fragment = fragmentManager.findFragmentById(R.id.fcv); if(fragment!=null){ fragmentTransaction.show(fragment).commit(); } } public void attachFragment(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment fragment = fragmentManager.findFragmentById(R.id.fcv); if(fragment!=null){ fragmentTransaction.attach(fragment).commit(); } } public void detachFragment(View view) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment fragment = fragmentManager.findFragmentById(R.id.fcv); if(fragment!=null){ fragmentTransaction.detach(fragment).commit(); } } } //命令adb shell dumpsys activity fragment可以查看添加的fragment
activity_modify_fragment.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" tools:context=".modify.ModifyFragmentActivity" android:orientation="vertical" > <androidx.fragment.app.FragmentContainerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/fcv" android:layout_marginTop="15dp" /> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="addFragment1" android:gravity="center" android:onClick="addFragment1" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="addFragment2" android:gravity="center" android:onClick="addFragment2" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="addFragment3" android:gravity="center" android:onClick="addFragment3" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="findFragmentById" android:gravity="center" android:onClick="findFragmentById" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="findFragmentByTag" android:gravity="center" android:onClick="findFragmentByTag" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="removeFragment" android:gravity="center" android:onClick="removeFragment" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="replaceFragment" android:gravity="center" android:onClick="replaceFragment" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="hideFragment" android:gravity="center" android:onClick="hideFragment" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="showFragment" android:gravity="center" android:onClick="showFragment" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="attachFragment" android:gravity="center" android:onClick="attachFragment" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:textAlignment="center" android:text="detachFragment" android:gravity="center" android:onClick="detachFragment" android:layout_gravity="center_horizontal" android:textAllCaps="false" ></Button> </LinearLayout>
DynameicFragment.xml
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package java.lang; import androidx.annotation.RecentlyNonNull; import androidx.annotation.RecentlyNullable; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.Comparator; import java.util.Locale; public final class String implements Serializable, Comparable<String>, CharSequence { public static final Comparator<String> CASE_INSENSITIVE_ORDER = null; public String() { throw new RuntimeException("Stub!"); } public String(@RecentlyNonNull String original) { throw new RuntimeException("Stub!"); } public String(char[] value) { throw new RuntimeException("Stub!"); } public String(char[] value, int offset, int count) { throw new RuntimeException("Stub!"); } public String(int[] codePoints, int offset, int count) { throw new RuntimeException("Stub!"); } /** @deprecated */ @Deprecated public String(byte[] ascii, int hibyte, int offset, int count) { throw new RuntimeException("Stub!"); } /** @deprecated */ @Deprecated public String(byte[] ascii, int hibyte) { throw new RuntimeException("Stub!"); } public String(byte[] bytes, int offset, int length, @RecentlyNonNull String charsetName) throws UnsupportedEncodingException { throw new RuntimeException("Stub!"); } public String(byte[] bytes, int offset, int length, @RecentlyNonNull Charset charset) { throw new RuntimeException("Stub!"); } public String(byte[] bytes, @RecentlyNonNull String charsetName) throws UnsupportedEncodingException { throw new RuntimeException("Stub!"); } public String(byte[] bytes, @RecentlyNonNull Charset charset) { throw new RuntimeException("Stub!"); } public String(byte[] bytes, int offset, int length) { throw new RuntimeException("Stub!"); } public String(byte[] bytes) { throw new RuntimeException("Stub!"); } public String(@RecentlyNonNull StringBuffer buffer) { throw new RuntimeException("Stub!"); } public String(@RecentlyNonNull StringBuilder builder) { throw new RuntimeException("Stub!"); } public int length() { throw new RuntimeException("Stub!"); } public boolean isEmpty() { throw new RuntimeException("Stub!"); } public native char charAt(int var1); public int codePointAt(int index) { throw new RuntimeException("Stub!"); } public int codePointBefore(int index) { throw new RuntimeException("Stub!"); } public int codePointCount(int beginIndex, int endIndex) { throw new RuntimeException("Stub!"); } public int offsetByCodePoints(int index, int codePointOffset) { throw new RuntimeException("Stub!"); } public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) { throw new RuntimeException("Stub!"); } /** @deprecated */ @Deprecated public void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) { throw new RuntimeException("Stub!"); } public byte[] getBytes(@RecentlyNonNull String charsetName) throws UnsupportedEncodingException { throw new RuntimeException("Stub!"); } public byte[] getBytes(@RecentlyNonNull Charset charset) { throw new RuntimeException("Stub!"); } public byte[] getBytes() { throw new RuntimeException("Stub!"); } public boolean equals(@RecentlyNullable Object anObject) { throw new RuntimeException("Stub!"); } public boolean contentEquals(@RecentlyNonNull StringBuffer sb) { throw new RuntimeException("Stub!"); } public boolean contentEquals(@RecentlyNonNull CharSequence cs) { throw new RuntimeException("Stub!"); } public boolean equalsIgnoreCase(@RecentlyNullable String anotherString) { throw new RuntimeException("Stub!"); } public native int compareTo(@RecentlyNonNull String var1); public int compareToIgnoreCase(@RecentlyNonNull String str) { throw new RuntimeException("Stub!"); } public boolean regionMatches(int toffset, @RecentlyNonNull String other, int ooffset, int len) { throw new RuntimeException("Stub!"); } public boolean regionMatches(boolean ignoreCase, int toffset, @RecentlyNonNull String other, int ooffset, int len) { throw new RuntimeException("Stub!"); } public boolean startsWith(@RecentlyNonNull String prefix, int toffset) { throw new RuntimeException("Stub!"); } public boolean startsWith(@RecentlyNonNull String prefix) { throw new RuntimeException("Stub!"); } public boolean endsWith(@RecentlyNonNull String suffix) { throw new RuntimeException("Stub!"); } public int hashCode() { throw new RuntimeException("Stub!"); } public int indexOf(int ch) { throw new RuntimeException("Stub!"); } public int indexOf(int ch, int fromIndex) { throw new RuntimeException("Stub!"); } public int lastIndexOf(int ch) { throw new RuntimeException("Stub!"); } public int lastIndexOf(int ch, int fromIndex) { throw new RuntimeException("Stub!"); } public int indexOf(@RecentlyNonNull String str) { throw new RuntimeException("Stub!"); } public int indexOf(@RecentlyNonNull String str, int fromIndex) { throw new RuntimeException("Stub!"); } public int lastIndexOf(@RecentlyNonNull String str) { throw new RuntimeException("Stub!"); } public int lastIndexOf(@RecentlyNonNull String str, int fromIndex) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String substring(int beginIndex) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String substring(int beginIndex, int endIndex) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public CharSequence subSequence(int beginIndex, int endIndex) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public native String concat(@RecentlyNonNull String var1); @RecentlyNonNull public String replace(char oldChar, char newChar) { throw new RuntimeException("Stub!"); } public boolean matches(@RecentlyNonNull String regex) { throw new RuntimeException("Stub!"); } public boolean contains(@RecentlyNonNull CharSequence s) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String replaceFirst(@RecentlyNonNull String regex, @RecentlyNonNull String replacement) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String replaceAll(@RecentlyNonNull String regex, @RecentlyNonNull String replacement) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String replace(@RecentlyNonNull CharSequence target, @RecentlyNonNull CharSequence replacement) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String[] split(@RecentlyNonNull String regex, int limit) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String[] split(@RecentlyNonNull String regex) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String join(@RecentlyNonNull CharSequence delimiter, @RecentlyNullable CharSequence... elements) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String join(@RecentlyNonNull CharSequence delimiter, @RecentlyNonNull Iterable<? extends CharSequence> elements) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String toLowerCase(@RecentlyNonNull Locale locale) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String toLowerCase() { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String toUpperCase(@RecentlyNonNull Locale locale) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String toUpperCase() { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String trim() { throw new RuntimeException("Stub!"); } @RecentlyNonNull public String toString() { throw new RuntimeException("Stub!"); } public native char[] toCharArray(); @RecentlyNonNull public static String format(@RecentlyNonNull String format, @RecentlyNonNull Object... args) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String format(@RecentlyNonNull Locale l, @RecentlyNonNull String format, @RecentlyNonNull Object... args) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(@RecentlyNullable Object obj) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(char[] data) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(char[] data, int offset, int count) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String copyValueOf(char[] data, int offset, int count) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String copyValueOf(char[] data) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(boolean b) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(char c) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(int i) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(long l) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(float f) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public static String valueOf(double d) { throw new RuntimeException("Stub!"); } @RecentlyNonNull public native String intern(); }
fragment_dynameic.xml
<?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=".fragment.DynameicFragment"> <!-- TODO: Update blank fragment layout --> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="这是动态fragment" /> <TextView android:layout_marginTop="25sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_content" android:textSize="25sp" ></TextView> </FrameLayout>
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术