Skip to content

Commit 472f350

Browse files
author
liang02.wang
committed
Fix issues #8
1 parent 532e67f commit 472f350

File tree

7 files changed

+63
-29
lines changed

7 files changed

+63
-29
lines changed

core/src/main/java/me/liam/helper/FragmentUtils.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import androidx.fragment.app.Fragment;
99
import androidx.fragment.app.FragmentManager;
1010
import me.liam.support.SupportFragment;
11-
import me.liam.support.SupportTransaction;
1211

1312
public class FragmentUtils {
1413

@@ -105,4 +104,17 @@ public static SupportFragment getBeforeOne(List<SupportFragment> list, SupportFr
105104
}
106105
return null;
107106
}
107+
108+
public static LinkedList<SupportFragment> getBackStackFragments(FragmentManager fm){
109+
LinkedList<SupportFragment> linkedList = new LinkedList<>();
110+
for (Fragment f : fm.getFragments()){
111+
if (f instanceof SupportFragment
112+
&& !f.isRemoving()
113+
&& !f.isDetached()
114+
&& ((SupportFragment)f).isBackStack()){
115+
linkedList.add((SupportFragment)f);
116+
}
117+
}
118+
return linkedList;
119+
}
108120
}

core/src/main/java/me/liam/support/ISupportFragment.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public interface ISupportFragment {
1515

1616
public boolean onBackPressed();
1717

18+
public boolean isBackStack();
19+
1820
public FragmentAnimation onCreateCustomerAnimation();
1921

2022
public void onLazyInit(Bundle savedInstanceState);

core/src/main/java/me/liam/support/SupportActivity.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.view.MotionEvent;
66

77
import java.util.ArrayList;
8+
import java.util.LinkedList;
89
import java.util.List;
910

1011
import androidx.annotation.Nullable;
@@ -33,15 +34,21 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
3334
@Override
3435
public void onBackPressed() {
3536
if (fragmentSwipeDrag) return;
36-
SupportFragment activeFragment = FragmentUtils.getLastFragment(getSupportFragmentManager());
37-
if (activeFragment != null && activeFragment.dispatcherOnBackPressed()){
38-
return;
39-
}
40-
if (FragmentUtils.getInManagerFragments(getSupportFragmentManager()).size() > 1){
37+
if (FragmentUtils.getActiveList(getSupportFragmentManager()).size() > 1){
38+
SupportFragment activeFragment = FragmentUtils.getLastActiveFragment(getSupportFragmentManager());
39+
if (activeFragment == null) {
40+
ActivityCompat.finishAfterTransition(this);
41+
return;
42+
}
43+
if (activeFragment.dispatcherOnBackPressed()){
44+
return;
45+
}
4146
pop();
4247
}else {
4348
ActivityCompat.finishAfterTransition(this);
4449
}
50+
51+
4552
}
4653

4754
@Override

core/src/main/java/me/liam/support/SupportFragment.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import android.view.animation.Animation;
1111
import android.view.animation.AnimationUtils;
1212

13+
import java.util.LinkedList;
14+
1315
import androidx.annotation.NonNull;
1416
import androidx.annotation.Nullable;
1517
import androidx.fragment.app.Fragment;
@@ -251,8 +253,9 @@ public <T extends SupportFragment> T findChildFragmentByClass(Class cls) {
251253
*/
252254
@Override
253255
public boolean dispatcherOnBackPressed() {
254-
if (getChildFragmentManager().getFragments().size() > 0){
255-
SupportFragment lastActive = FragmentUtils.getLastFragment(getChildFragmentManager());
256+
LinkedList<SupportFragment> backStackList = FragmentUtils.getBackStackFragments(getChildFragmentManager());
257+
if (backStackList.size() > 0){
258+
SupportFragment lastActive = backStackList.getLast();
256259
if (lastActive != null){
257260
return lastActive.dispatcherOnBackPressed();
258261
}
@@ -266,13 +269,23 @@ public boolean dispatcherOnBackPressed() {
266269
*/
267270
@Override
268271
public boolean onBackPressed() {
269-
if (getArguments().getBoolean(SupportTransaction.FRAGMENTATION_BACK_STACK)){
272+
if (isBackStack()){
270273
pop();
271274
return true;
272275
}
273276
return false;
274277
}
275278

279+
/**
280+
* 当前Fragment是否被加入back键回退栈
281+
* @return
282+
*/
283+
@Override
284+
public boolean isBackStack() {
285+
if (getArguments() == null) return false;
286+
return getArguments().getBoolean(SupportTransaction.FRAGMENTATION_BACK_STACK);
287+
}
288+
276289
/**
277290
* 重写此方法可完成自定义Fragment动画
278291
* 重写返回null并不会将Fragment设置为空动画

core/src/main/java/me/liam/support/SupportTransaction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import me.liam.queue.Action;
1717
import me.liam.queue.ActionQueue;
1818

19-
public class SupportTransaction {
19+
class SupportTransaction {
2020

2121
final public static String FRAGMENTATION_CONTAINER_ID = "Fragmentation:ContainerId";
2222
final public static String FRAGMENTATION_TAG = "Fragmentation:Tag";

demo/src/main/java/wechat/MineFragment.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,17 @@ public void onClick(View view) {
6464
});
6565
return rootView;
6666
}
67-
68-
@Override
69-
public boolean onBackPressed() {
70-
if (getChildFragmentManager().getFragments().size() > 0){
71-
popChild();
72-
return true;
73-
}else {
74-
((RootFragment)getParentFragment()).onBackPressed();
75-
return true;
76-
}
77-
}
67+
//
68+
// @Override
69+
// public boolean onBackPressed() {
70+
// if (getChildFragmentManager().getFragments().size() > 0){
71+
// popChild();
72+
// return true;
73+
// }else {
74+
// ((RootFragment)getParentFragment()).onBackPressed();
75+
// return true;
76+
// }
77+
// }
7878

7979
@Override
8080
public void onLazyInit(Bundle savedInstanceState) {

demo/src/main/java/wechat/RootFragment.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,13 @@ public void onSelect(int position) {
7777

7878
@Override
7979
public boolean onBackPressed() {
80-
// return super.onBackPressed();
81-
if (!homePageFragment.isVisible()){
82-
showHideAllFragment(homePageFragment);
83-
return true;
84-
}else {
85-
getActivity().finish();
86-
return true;
87-
}
80+
return super.onBackPressed();
81+
// if (!homePageFragment.isVisible()){
82+
// showHideAllFragment(homePageFragment);
83+
// return true;
84+
// }else {
85+
// getActivity().finish();
86+
// return true;
87+
// }
8888
}
8989
}

0 commit comments

Comments
 (0)