基础使用 - xuexiangjys/xpage GitHub Wiki

页面跳转

使用XPage,Activity必须要继承XPageActivity,Fragment必须要继承XPageFragment,否则将无法调用页面跳转的openPage方法。

页面的简单打开和关闭

  • 使用openPage即可打开页面,入参可为跳转类的类名,也可以是类的标识(@Page标注的name字段)
// 使用类名打开
openPage(TestFragment.class);
// 使用标识打开
openPage("TestFragment");
  • 使用popToBack即可关闭页面。
// 关闭当前页,返回上一页
popToBack();
// 关闭当前页并跳转至某个页面
popToBack("popBackName", null);

页面打开等待结果返回

  • 1.使用openPageForResult即可,类似Activity里的startActivityForResult
openPageForResult(TestFragment.class, null, REQUEST_CODE);
  • 2.使用setFragmentResult来设置页面关闭的返回值,类似Activity里的setResult方法。
// 设置返回的数据,类似Activity里的setResult
Intent intent = new Intent();
intent.putExtra(KEY_BACK_DATA, "==【返回的数据】==");
setFragmentResult(500, intent);
// 返回操作
popToBack();
  • 3.重写Fragment的onFragmentResult方法来接收返回的数据,类似Activity里的onActivityResult方法。
@Override
public void onFragmentResult(int requestCode, int resultCode, Intent data) {
    super.onFragmentResult(requestCode, resultCode, data);
    if (data != null) {
        Bundle extras = data.getExtras();
        XToastUtils.toast("requestCode:" + requestCode + " resultCode:" + resultCode + " data:" + extras.getString(TestFragment.KEY_BACK_DATA));
    }
}

数据传递

  • 使用openPage打开页面时,可传入Bundle作为参数。
// 设置需要传递的参数
Bundle params = new Bundle();
params.putBoolean(DateReceiveFragment.KEY_IS_NEED_BACK, false);
int id = (int) (Math.random() * 100);
params.putString(DateReceiveFragment.KEY_EVENT_NAME, "事件" + id);
params.putString(DateReceiveFragment.KEY_EVENT_DATA, "事件" + id + "携带的数据");
// 把参数传入
openPage(DateReceiveFragment.class, params);
  • 数据接收

数据接收和普通Fragment接收数据一样,使用getArguments获取传入的数据。

Bundle arguments = getArguments();
String eventName = arguments.getString(DateReceiveFragment.KEY_EVENT_NAME);
String eventData = arguments.getString(DateReceiveFragment.KEY_EVENT_DATA);

页面转场动画

页面转场动画可以动态设置,也可以静态设置。

静态设置

在我们使用@Page进行页面注册的时候,我们可以静态设置转场动画、默认参数、拓展字段等。

Page注解的属性表:

属性名 类型 默认值 备注
name String 注解类的类名 页面的名称、唯一标识符
params String[] {""} 静态设置默认参数
anim CoreAnim CoreAnim.slide 页面转场动画
extra int -1 拓展字段

动态设置

使用openPage打开页面时,可传入CoreAnim枚举设置页面转场动画。

switch(position) {
    case 0:
        openPage(TestFragment.PAGE_NAME, null, CoreAnim.none);//没有动画
        break;
    case 1:
        openPage(TestFragment.PAGE_NAME, null, CoreAnim.present);//由下到上动画
        break;
    case 2:
        openPage(TestFragment.PAGE_NAME, null, CoreAnim.slide);//从左到右动画
        break;
    case 3:
        openPage(TestFragment.PAGE_NAME, null, CoreAnim.fade);//渐变
        break;
    case 4:
        openPage(TestFragment.PAGE_NAME, null, CoreAnim.zoom);//放大
        break;
    default:
        break;
}

设置自定义转场动画

//自定义动画
openPage(TestFragment.PAGE_NAME, null, new int[]{
        // OpenEnterAnimation, 页面打开进场动画
        R.anim.custom_open_enter,
        // OpenExitAnimation, 页面打开退场动画
        R.anim.custom_open_exit,

        // CloseEnterAnimation, 页面关闭进场动画
        R.anim.custom_close_enter,
        // CloseExitAnimation, 页面关闭退场动画
        R.anim.custom_close_exit
});