Skip to content

Commit

Permalink
优化弹出代码,防止崩溃
Browse files Browse the repository at this point in the history
  • Loading branch information
xuexiangjys committed Dec 16, 2019
1 parent 7287499 commit 4cf9cd2
Show file tree
Hide file tree
Showing 10 changed files with 109 additions and 62 deletions.
26 changes: 0 additions & 26 deletions app/src/main/java/com/xuexiang/xpagedemo/MyApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,32 +43,6 @@ public List<PageInfo> registerPages(Context context) {
initRouter();
}

/**
* 增加组件信息和子演示页信息
*
* @param clazz 【继承了ListSimpleFragment的类】
*/
private void addPageInfoAndSubPages(List<PageInfo> pageInfos, Class<? extends XPageSimpleListFragment> clazz) {
pageInfos.add(PageConfig.getPageInfo(clazz));
try {
registerPageInfos(pageInfos, clazz.newInstance().getSimplePageClasses());
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 注册多个页面信息
*
* @param clazz
* @return
*/
private void registerPageInfos(List<PageInfo> pageInfos, Class... clazz) {
for (Class aClazz : clazz) {
pageInfos.add(PageConfig.getPageInfo(aClazz));
}
}

private void initRouter() {
// 这两行必须写在init之前,否则这些配置在init过程中将无效
if (BuildConfig.DEBUG) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

import java.util.List;

import static com.xuexiang.xpagedemo.fragment.TestFragment.KEY_POP_BACK_NAME;

/**
* @author XUE
* @since 2019/3/21 10:56
Expand All @@ -32,6 +34,7 @@ protected List<String> initSimpleData(List<String> lists) {
lists.add("是否支持数据返回");
lists.add("打开新的Activity");
lists.add("使用自定义的容器打开新的Activity");
lists.add("返回至指定的页面");
return lists;
}

Expand All @@ -43,8 +46,9 @@ protected List<String> initSimpleData(List<String> lists) {
@Override
protected void onItemClick(int position) {
PageOption pageOption = new PageOption(TestFragment.class);
switch(position) {
switch (position) {
case 0:
pageOption.setTargetPage(AnimationFragment.class);
break;
case 1:
pageOption.setAnim(CoreAnim.zoom);
Expand All @@ -59,6 +63,10 @@ protected void onItemClick(int position) {
case 4:
pageOption.setNewActivity(true, ContainActivity.class);
break;
case 5:
//下个页面点击返回后,直接返回至XPage主页面
pageOption.putString(KEY_POP_BACK_NAME, "XPage");
break;
default:
break;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.xuexiang.xpagedemo.fragment;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

Expand All @@ -15,21 +14,25 @@
import butterknife.BindView;

import static com.xuexiang.xpagedemo.fragment.DateReceiveFragment.KEY_BACK_DATA;
import static com.xuexiang.xpagedemo.fragment.DateReceiveFragment.KEY_EVENT_NAME;
import static com.xuexiang.xpagedemo.fragment.DateReceiveFragment.KEY_IS_NEED_BACK;

/**
* @author xuexiang
* @date 2018/1/7 下午11:27
*/
@Page(name = TestFragment.PAGE_NAME, extra = 123, params = {KEY_IS_NEED_BACK})
@Page(name = TestFragment.PAGE_NAME, extra = 123)
public class TestFragment extends XPageFragment {
public final static String PAGE_NAME = "测试页面";
public final static String KEY_POP_BACK_NAME = "key_pop_back_name";

@BindView(R.id.tv_content)
TextView tvContent;

@AutoWired(name = KEY_IS_NEED_BACK)
boolean isNeedBack;
@AutoWired(name = KEY_POP_BACK_NAME)
String popBackName;

/**
* 布局的资源id
*
Expand All @@ -50,7 +53,8 @@ public void onClick(View v) {
.putExtra(KEY_BACK_DATA, "==【返回的数据】==");
setFragmentResult(500, intent);
}
popToBack();
//回到指定的页面
popToBack(popBackName, null);
}
});
}
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip
47 changes: 32 additions & 15 deletions xpage-lib/src/main/java/com/xuexiang/xpage/base/XPageActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ protected String getPageName() {
@Override
public void popPage() {
popOrFinishActivity();

}

/**
Expand All @@ -130,19 +129,26 @@ private void popOrFinishActivity() {
}
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
if (isMainThread()) {
getSupportFragmentManager().popBackStackImmediate();
popBackStackImmediateSafety();
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
getSupportFragmentManager().popBackStackImmediate();
popBackStackImmediateSafety();
}
});
}
} else {
finishActivity(this, true);
}
}

private void popBackStackImmediateSafety() {
try {
getSupportFragmentManager().popBackStackImmediate();
} catch (Exception e) {
PageLog.e(e);
}
}

/**
Expand Down Expand Up @@ -192,10 +198,10 @@ private void finishActivity(XPageActivity activity, boolean showAnimation) {
public boolean isFragmentTop(String fragmentTag) {
int size = sActivities.size();
if (size > 0) {
WeakReference<XPageActivity> ref = sActivities.get(size - 1);
XPageActivity item = ref.get();
if (item != null && item == this) {
FragmentManager manager = item.getSupportFragmentManager();
WeakReference<XPageActivity> reference = sActivities.get(size - 1);
XPageActivity activity = reference.get();
if (activity != null && activity == this) {
FragmentManager manager = activity.getSupportFragmentManager();
if (manager != null) {
int count = manager.getBackStackEntryCount();
if (count >= 1) {
Expand All @@ -219,18 +225,18 @@ public boolean findPage(String pageName) {
int size = sActivities.size();
boolean hasFind = false;
for (int j = size - 1; j >= 0; j--) {
WeakReference<XPageActivity> ref = sActivities.get(j);
if (ref != null) {
XPageActivity item = ref.get();
if (item == null) {
WeakReference<XPageActivity> reference = sActivities.get(j);
if (reference != null) {
XPageActivity activity = reference.get();
if (activity == null) {
PageLog.d("item is null");
continue;
}
FragmentManager manager = item.getSupportFragmentManager();
FragmentManager manager = activity.getSupportFragmentManager();
int count = manager.getBackStackEntryCount();
for (int i = count - 1; i >= 0; i--) {
String name = manager.getBackStackEntryAt(i).getName();
if (name.equalsIgnoreCase(pageName)) {
if (name != null && name.equalsIgnoreCase(pageName)) {
hasFind = true;
break;
}
Expand Down Expand Up @@ -303,9 +309,13 @@ protected boolean popFragmentInActivity(final String pageName, Bundle bundle, XP
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
fragmentManager.popBackStack(pageName, 0);
try {
fragmentManager.popBackStack(pageName, 0);
} catch (Exception e) {
PageLog.e(e);
}
}
}, 100);
}, getPopBackDelay());
}
((XPageFragment) frg).onFragmentDataReset(bundle);
return true;
Expand All @@ -315,6 +325,13 @@ public void run() {
return false;
}

/**
* @return 弹出延迟时间
*/
protected int getPopBackDelay() {
return 100;
}

//==================startActivity=======================//

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@ public static void setBundleClassLoader(ClassLoader classLoader) {
mBundleClassLoader = classLoader;
}

/**
* Atlas支持 end
*/
public final static String ACTION_EXIT_APP = "com.xuexiang.xpage.corepage.core.exit";

private static Context sContext;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,11 @@ public Fragment gotoPage(FragmentManager fragmentManager, String pageName, Bundl
fragment = fragmentManager.findFragmentByTag(pageName);
}
if (fragment != null) {
fragmentManager.popBackStackImmediate(pageName, 0);
try {
fragmentManager.popBackStackImmediate(pageName, 0);
} catch (Exception e) {
PageLog.e(e);
}
} else {
fragment = this.openPageWithNewFragmentManager(fragmentManager, pageName, bundle, animations, true);
}
Expand Down
18 changes: 15 additions & 3 deletions xpage-lib/src/main/java/com/xuexiang/xpage/core/PageOption.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,7 @@ public PageOption(String pageName) {
}

public <T extends XPageFragment> PageOption(Class<T> clazz) {
PageInfo pageInfo = PageConfig.getPageInfo(clazz);
mPageName = pageInfo.getName();
setAnim(pageInfo.getAnim());
setTargetPage(clazz);
}

public PageOption(String pageName, Bundle bundle) {
Expand Down Expand Up @@ -114,6 +112,20 @@ public PageOption(String pageName, Bundle bundle, CoreAnim anim, boolean addToBa
mRequestCode = requestCode;
}

/**
* 设置跳转目标页
*
* @param clazz 必须使用@Page进行修饰的类
* @param <T>
* @return
*/
public <T extends XPageFragment> PageOption setTargetPage(Class<T> clazz) {
PageInfo pageInfo = PageConfig.getPageInfo(clazz);
mPageName = pageInfo.getName();
setAnim(pageInfo.getAnim());
return this;
}

public String getPageName() {
return mPageName;
}
Expand Down
41 changes: 37 additions & 4 deletions xpage-lib/src/main/java/com/xuexiang/xpage/utils/TitleBar.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import android.support.v7.widget.AppCompatImageView;
import android.text.TextPaint;
import android.text.TextUtils;
Expand All @@ -36,6 +38,7 @@
import android.widget.TextView;

import com.xuexiang.xpage.R;
import com.xuexiang.xpage.core.CoreConfig;

import java.util.LinkedList;

Expand Down Expand Up @@ -265,6 +268,32 @@ public TitleBar setLeftImageResource(int resId) {
return this;
}

/**
* 设置左侧文字是否加粗
*
* @param isBold
* @return
*/
public TitleBar setLeftTextBold(boolean isBold) {
if (mLeftText != null) {
mLeftText.getPaint().setFakeBoldText(isBold);
}
return this;
}

/**
* 设置中间文字是否加粗
*
* @param isBold
* @return
*/
public TitleBar setCenterTextBold(boolean isBold) {
if (mCenterText != null) {
mCenterText.getPaint().setFakeBoldText(isBold);
}
return this;
}

/**
* 设置左侧图标
*
Expand Down Expand Up @@ -817,15 +846,15 @@ public interface Action {
*/
public static abstract class ImageAction implements Action {

private int mDrawable;
private int mDrawableId;

public ImageAction(int drawable) {
mDrawable = drawable;
public ImageAction(@DrawableRes int drawableId) {
mDrawableId = drawableId;
}

@Override
public int getDrawable() {
return mDrawable;
return mDrawableId;
}

@Override
Expand Down Expand Up @@ -855,6 +884,10 @@ public TextAction(String text) {
mText = text;
}

public TextAction(@StringRes int resId) {
mText = CoreConfig.getContext().getString(resId);
}

@Override
public int getDrawable() {
return 0;
Expand Down
4 changes: 2 additions & 2 deletions xpage-lib/src/main/java/com/xuexiang/xpage/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private static Resources getResources(Context context) {
}

/**
* 获取dimes值【px不会乘以Denstiy.】
* 获取dimes值,返回的是【去余取整】的值
*
* @param resId
* @return
Expand All @@ -52,7 +52,7 @@ public static int getDimensionPixelOffset(Context context, @DimenRes int resId)
}

/**
* 获取dimes值【getDimensionPixelSize则不管写的是dp还是sp还是px,都会乘以denstiy.】
* 获取dimes值,返回的是【4舍5入】的值
*
* @param resId
* @return
Expand Down

0 comments on commit 4cf9cd2

Please sign in to comment.