mirror of
https://github.com/Tencent/QMUI_Android.git
synced 2026-10-27 10:29:46 +08:00
bugfix: the wrong z-order after startFragmentAndDestroyCurrent. #509
This commit is contained in:
@@ -345,6 +345,16 @@ public abstract class QMUIFragment extends Fragment {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needReNameTag() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String newTagName() {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
popBackStack();
|
||||
}
|
||||
|
||||
@@ -126,6 +126,16 @@ public abstract class QMUIFragmentActivity extends InnerBaseActivity {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needReNameTag() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String newTagName() {
|
||||
return fragment.getClass().getSimpleName();
|
||||
}
|
||||
});
|
||||
return index;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ import android.app.Activity;
|
||||
import android.app.ActivityOptions;
|
||||
import android.os.Build;
|
||||
import android.os.Looper;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.qmuiteam.qmui.QMUILog;
|
||||
|
||||
@@ -30,6 +29,8 @@ import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
/**
|
||||
* Created by Chaojun Wang on 6/9/14.
|
||||
*/
|
||||
@@ -136,30 +137,37 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
static void findAndModifyOpInBackStackRecord(FragmentManager fragmentManager, int backStackIndex, OpHandler handler){
|
||||
static void findAndModifyOpInBackStackRecord(FragmentManager fragmentManager, int backStackIndex, OpHandler handler) {
|
||||
if (fragmentManager == null || handler == null) {
|
||||
return;
|
||||
}
|
||||
int backStackCount = fragmentManager.getBackStackEntryCount();
|
||||
if (backStackCount > 0) {
|
||||
if(backStackIndex >= backStackCount || backStackIndex < -backStackCount){
|
||||
if (backStackIndex >= backStackCount || backStackIndex < -backStackCount) {
|
||||
QMUILog.d("findAndModifyOpInBackStackRecord", "backStackIndex error: " +
|
||||
"backStackIndex = " + backStackIndex + " ; backStackCount = " + backStackCount);
|
||||
return;
|
||||
}
|
||||
if(backStackIndex < 0){
|
||||
if (backStackIndex < 0) {
|
||||
backStackIndex = backStackCount + backStackIndex;
|
||||
}
|
||||
try {
|
||||
FragmentManager.BackStackEntry backStackEntry = fragmentManager.getBackStackEntryAt(backStackIndex);
|
||||
|
||||
if (handler.needReNameTag()) {
|
||||
Field nameField = backStackEntry.getClass().getDeclaredField("mName");
|
||||
nameField.setAccessible(true);
|
||||
nameField.set(backStackEntry, handler.newTagName());
|
||||
}
|
||||
|
||||
|
||||
Field opsField = backStackEntry.getClass().getDeclaredField("mOps");
|
||||
opsField.setAccessible(true);
|
||||
Object opsObj = opsField.get(backStackEntry);
|
||||
if (opsObj instanceof List<?>) {
|
||||
List<?> ops = (List<?>) opsObj;
|
||||
for (Object op : ops) {
|
||||
if(handler.handle(op)){
|
||||
if (handler.handle(op)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -174,5 +182,9 @@ public class Utils {
|
||||
|
||||
interface OpHandler {
|
||||
boolean handle(Object op);
|
||||
|
||||
boolean needReNameTag();
|
||||
|
||||
String newTagName();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user