Skip to content

Commit

Permalink
增加PageOption选项,增强api的灵活性
Browse files Browse the repository at this point in the history
  • Loading branch information
xuexiangjys committed Mar 21, 2019
1 parent 3292ad6 commit 06f3b2e
Show file tree
Hide file tree
Showing 9 changed files with 450 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ protected Class[] getPagesClasses() {
return new Class[]{
DataTransmitFragment.class,
AnimationFragment.class,
ComplexPageFragment.class
ComplexPageFragment.class,
PopBackFragment.class,
PageOptionFragment.class
};
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.xuexiang.xpagedemo.fragment;

import android.content.Intent;
import android.os.Bundle;

import com.xuexiang.xpage.annotation.Page;
import com.xuexiang.xpage.base.XPageSimpleListFragment;
import com.xuexiang.xpage.core.PageOption;
import com.xuexiang.xpage.enums.CoreAnim;
import com.xuexiang.xutil.tip.ToastUtils;

import java.util.List;

/**
* @author XUE
* @since 2019/3/21 10:56
*/
@Page(name = "PageOption使用")
public class PageOptionFragment extends XPageSimpleListFragment {

/**
* 初始化例子
*
* @param lists
* @return
*/
@Override
protected List<String> initSimpleData(List<String> lists) {
lists.add("普通打开");
lists.add("设置动画");
lists.add("是否支持数据返回");
return lists;
}

/**
* 条目点击
*
* @param position
*/
@Override
protected void onItemClick(int position) {
PageOption pageOption = new PageOption(TestFragment.class);
switch(position) {
case 0:
break;
case 1:
pageOption.setAnim(CoreAnim.zoom);
break;
case 2:
pageOption.setRequestCode(100)
.putBoolean(DateReceiveFragment.KEY_IS_NEED_BACK, true);
break;
default:
break;
}
openPage(pageOption);
}

@Override
public void onFragmentResult(int requestCode, int resultCode, Intent data) {
super.onFragmentResult(requestCode, resultCode, data);
if (data != null) {
Bundle extras = data.getExtras();
ToastUtils.toast("requestCode:" + requestCode + " resultCode:" + resultCode + " data:" + extras.getString(DateReceiveFragment.KEY_BACK_DATA));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.xuexiang.xpagedemo.fragment;

import com.xuexiang.xpage.annotation.Page;
import com.xuexiang.xpage.base.XPageSimpleListFragment;

import java.util.List;

/**
* @author XUE
* @since 2019/3/21 10:42
*/
@Page(name = "测试PopBack")
public class PopBackFragment extends XPageSimpleListFragment {
/**
* 初始化例子
*
* @param lists
* @return
*/
@Override
protected List<String> initSimpleData(List<String> lists) {
lists.add("AddToBackStack = true");
lists.add("AddToBackStack = false");
return lists;
}

/**
* 条目点击
*
* @param position
*/
@Override
protected void onItemClick(int position) {
switch(position) {
case 0:
openPage(PopBackFragment.class, true);
break;
case 1:
openPage(PopBackFragment.class, false);
break;
default:
break;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,32 @@
package com.xuexiang.xpagedemo.fragment;

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

import com.xuexiang.xpage.annotation.Page;
import com.xuexiang.xpage.base.XPageFragment;
import com.xuexiang.xpage.utils.TitleBar;
import com.xuexiang.xpagedemo.R;

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)
@Page(name = TestFragment.PAGE_NAME, extra = 123, params = {KEY_IS_NEED_BACK})
public class TestFragment extends XPageFragment {
public final static String PAGE_NAME = "测试页面";
@BindView(R.id.tv_content)
TextView tvContent;

boolean isNeedBack;
/**
* 布局的资源id
*
Expand All @@ -28,6 +37,29 @@ protected int getLayoutId() {
return R.layout.fragment_test;
}

@Override
protected TitleBar initTitleBar() {
return super.initTitleBar().setLeftClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isNeedBack) {
Intent intent = new Intent()
.putExtra(KEY_BACK_DATA, "==【返回的数据】==");
setFragmentResult(500, intent);
}
popToBack();
}
});
}

@Override
protected void initArgs() {
Bundle arguments = getArguments();
if (arguments != null) {
isNeedBack = arguments.getBoolean(KEY_IS_NEED_BACK);
}
}

/**
* 初始化控件
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ public Fragment openPageForResult(CoreSwitchBean page, XPageFragment fragment) {
Bundle bundle = page.getBundle();
int[] animations = page.getAnim();
boolean addToBackStack = page.isAddToBackStack();
XPageFragment frg = (XPageFragment) CorePageManager.getInstance().openPageWithNewFragmentManager(getSupportFragmentManager(), pageName, bundle, animations, addToBackStack);
XPageFragment frg = CorePageManager.getInstance().openPageWithNewFragmentManager(getSupportFragmentManager(), pageName, bundle, animations, addToBackStack);
if (frg == null) {
return null;
}
Expand Down Expand Up @@ -569,7 +569,7 @@ public Fragment openPage(String pageName, Bundle bundle, CoreAnim coreAnim) {
* @return 打开的fragment对象
*/
public <T extends XPageFragment> T openPage(Class<T> clazz) {
CoreSwitchBean page = new CoreSwitchBean(PageConfig.getPageInfo(clazz).getName(), null, PageConfig.getPageInfo(clazz).getAnim());
CoreSwitchBean page = new CoreSwitchBean(clazz);
return (T) openPage(page);
}

Expand All @@ -581,7 +581,7 @@ public <T extends XPageFragment> T openPage(Class<T> clazz) {
* @return 打开的fragment对象
*/
public <T extends XPageFragment> T openPage(Class<T> clazz, Bundle bundle) {
CoreSwitchBean page = new CoreSwitchBean(PageConfig.getPageInfo(clazz).getName(), bundle, PageConfig.getPageInfo(clazz).getAnim());
CoreSwitchBean page = new CoreSwitchBean(clazz, bundle);
return (T) openPage(page);
}

Expand Down
64 changes: 53 additions & 11 deletions xpage-lib/src/main/java/com/xuexiang/xpage/base/XPageFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.xuexiang.xpage.PageConfig;
import com.xuexiang.xpage.core.CoreSwitchBean;
import com.xuexiang.xpage.core.CoreSwitcher;
import com.xuexiang.xpage.core.PageOption;
import com.xuexiang.xpage.enums.CoreAnim;
import com.xuexiang.xpage.logger.PageLog;
import com.xuexiang.xpage.utils.TitleBar;
Expand Down Expand Up @@ -104,6 +105,7 @@ public boolean onKeyDown(int keyCode, KeyEvent event) {


//================页面返回===================//

/**
* 数据设置,回调
*
Expand All @@ -129,7 +131,7 @@ public void popToBackForResult(PopCallback callback) {
}

/**
* 弹出栈顶的Fragment。如果Activity中只有一个Fragemnt时,Acitivity也退出
* 弹出栈顶的Fragment。如果Activity中只有一个Fragment时,Activity也退出
*/
public void popToBack() {
popToBack(null, null);
Expand Down Expand Up @@ -247,8 +249,19 @@ public void onFragmentResult(int requestCode, int resultCode, Intent data) {
*
* @return 打开的fragment对象
*/
public Fragment openPage(Class<?> clazz) {
return openPage(PageConfig.getPageInfo(clazz).getName(), null, PageConfig.getPageInfo(clazz).getAnim());
public <T extends XPageFragment> T openPage(Class<T> clazz) {
return (T) openPage(PageConfig.getPageInfo(clazz).getName(), null, PageConfig.getPageInfo(clazz).getAnim());
}

/**
* 打开fragment[使用注解反射]
*
* @param clazz 页面类
* @param addToBackStack 是否添加到用户操作栈中
* @return 打开的fragment对象
*/
public <T extends XPageFragment> T openPage(Class<T> clazz, boolean addToBackStack) {
return (T) openPage(PageConfig.getPageInfo(clazz).getName(), null, PageConfig.getPageInfo(clazz).getAnim(), addToBackStack);
}

/**
Expand All @@ -258,8 +271,8 @@ public Fragment openPage(Class<?> clazz) {
* @param bundle 页面跳转时传递的参数
* @return 打开的fragment对象
*/
public Fragment openPage(Class<?> clazz, Bundle bundle) {
return openPage(PageConfig.getPageInfo(clazz).getName(), bundle, PageConfig.getPageInfo(clazz).getAnim());
public <T extends XPageFragment> T openPage(Class<T> clazz, Bundle bundle) {
return (T) openPage(PageConfig.getPageInfo(clazz).getName(), bundle, PageConfig.getPageInfo(clazz).getAnim());
}

/**
Expand All @@ -269,8 +282,8 @@ public Fragment openPage(Class<?> clazz, Bundle bundle) {
* @param bundle 页面跳转时传递的参数
* @return 打开的fragment对象
*/
public Fragment openPage(Class<?> clazz, Bundle bundle, CoreAnim coreAnim) {
return openPage(PageConfig.getPageInfo(clazz).getName(), bundle, coreAnim);
public <T extends XPageFragment> T openPage(Class<T> clazz, Bundle bundle, CoreAnim coreAnim) {
return (T) openPage(PageConfig.getPageInfo(clazz).getName(), bundle, coreAnim);
}

/**
Expand Down Expand Up @@ -323,7 +336,7 @@ public final Fragment openPage(String pageName, Bundle bundle, int[] anim, boole
/**
* 打开一个fragment并设置是否新开activity,设置是否添加返回栈
*
* @param pageName Fragemnt 名,在page.json中配置。
* @param pageName Fragment 名,在page.json中配置。
* @param bundle 页面跳转时传递的参数
* @param anim 指定的动画理性 none/slide(左右平移)/present(由下向上)/fade(fade 动画)
* @param addToBackStack 是否添加到用户操作栈中
Expand Down Expand Up @@ -424,8 +437,8 @@ public Fragment gotoPage(String pageName, Bundle bundle, CoreAnim coreAnim, bool
* @param requestCode 请求码
* @return 打开的fragment对象
*/
public final Fragment openPageForResult(Class<?> clazz, Bundle bundle, int requestCode) {
return openPageForResult(false, PageConfig.getPageInfo(clazz).getName(), bundle, PageConfig.getPageInfo(clazz).getAnim(), requestCode);
public final <T extends XPageFragment> T openPageForResult(Class<T> clazz, Bundle bundle, int requestCode) {
return (T) openPageForResult(false, PageConfig.getPageInfo(clazz).getName(), bundle, PageConfig.getPageInfo(clazz).getAnim(), requestCode);
}

/**
Expand All @@ -452,6 +465,20 @@ public final Fragment openPageForResult(String pageName, Bundle bundle, CoreAnim
* @return 打开的fragment对象
*/
public final Fragment openPageForResult(boolean newActivity, String pageName, Bundle bundle, CoreAnim coreAnim, int requestCode) {
return openPageForResult(newActivity, pageName, bundle, CoreSwitchBean.convertAnimations(coreAnim), requestCode);
}

/**
* 打开fragment并请求获得返回值,并设置是否在新activity中打开
*
* @param newActivity 是否新开activity
* @param pageName 页面名
* @param bundle 参数
* @param coreAnim 动画
* @param requestCode 请求码
* @return 打开的fragment对象
*/
public final Fragment openPageForResult(boolean newActivity, String pageName, Bundle bundle, int[] coreAnim, int requestCode) {
CoreSwitcher pageCoreSwitcher = this.getSwitcher();
if (pageCoreSwitcher != null) {
CoreSwitchBean page = new CoreSwitchBean(pageName, bundle, coreAnim, true, newActivity);
Expand All @@ -464,6 +491,20 @@ public final Fragment openPageForResult(boolean newActivity, String pageName, Bu
}
}

/**
* 打开fragment并请求获得返回值
*
* @param pageOption 页面选项
* @return 打开的fragment对象
*/
public final Fragment openPage(PageOption pageOption) {
if (pageOption.isOpenForResult()) {
return openPageForResult(pageOption.isNewActivity(), pageOption.getPageName(), pageOption.getBundle(), pageOption.getAnim(), pageOption.getRequestCode());
} else {
return openPage(pageOption.getPageName(), pageOption.getBundle(), pageOption.getAnim(), pageOption.isAddToBackStack(), pageOption.isNewActivity());
}
}

//======================生命周期=======================//
@Override
public void onAttach(Activity activity) {
Expand Down Expand Up @@ -605,8 +646,9 @@ protected <T extends View> T findViewById(int id) {
public interface OnFragmentFinishListener {
/**
* 页面跳转返回的回调接口
*
* @param requestCode 请求码
* @param resultCode 结果码
* @param resultCode 结果码
* @param intent
*/
void onFragmentResult(int requestCode, int resultCode, Intent intent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,6 @@ public XPageFragment openPageWithNewFragmentManager(FragmentManager fragmentMana

fragmentTransaction.commitAllowingStateLoss();
//fragmentTransaction.commit();

} catch (Exception e) {
e.printStackTrace();
PageLog.d("Fragment.error:" + e.getMessage());
Expand Down
Loading

0 comments on commit 06f3b2e

Please sign in to comment.