路由框架ARouter的初步使用

ARouter的使用

添加依赖和配置

android {
    defaultConfig {
    ...
    javaCompileOptions {
        annotationProcessorOptions {
        arguments = [ moduleName : project.getName() ]
        }
    }
    }
}

dependencies {
    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    compile 'com.alibaba:arouter-api:x.x.x'
    annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
    ...
}
// 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
// Kotlin配置参考文末'其他#5'

添加注解
// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx

@Route(path = "/test/activity")
public class YourActivity extend Activity {
    ...
}

1.发起路由操作

应用内简单的跳转(通过URL跳转在’进阶用法’中)

ARouter.getInstance().build("/test/activity").navigation();

2.跳转并携带参数

ARouter.getInstance().build("/test/1")
                .withString("name", "888")
                        .withInt("age", 11)
            .navigation();

3.接受参数
在Activity中获取参数有两种方式,一种是普通Activity那样getIntent().getXXX
加一种是使用@Autowired注解的方式

 @Autowired
    public String name;
    @Autowired(name = "age")
    int age;
 ARouter.getInstance().inject(this);//添加在onCreate()
// ARouter会自动对字段进行赋值,无需主动获取
    Log.d("param", name + age + age);

跳转传递对象

public class TestObj implements Serializable {
    public String name;
    public int id;

    public TestObj() {
    }

    public TestObj(String name, int id) {
        this.name = name;
        this.id = id;
    }
}
入参数
  // 2. 跳转并携带参数
                List<TestObj> list = new ArrayList<>();
                for (int i = 0; i < 5; i++) {
                    TestObj testObj = new TestObj("Rose" + i, 777);
                    list.add(testObj);
                }
                ARouter.getInstance().build(ARouterManager.BModuleActivity)
                        .withString("name", "老王")
                        .withInt("age", 18)
                        .withString("url", "https://a.b.c")
                        .withSerializable("pac", (Serializable) list)
                        .navigation();

            }

#接受参数
 List<TestObj> chooseList = (List<TestObj>) getIntent().getSerializableExtra("pac");//获取list方式
 txt.setText("name:" + chooseList.size());
上面是按照原生的getXXX获取跳转参数
另一种得到参数方式
和上述方式一样添加
 @Autowired
  TestObj  obj;
ARouter.getInstance().inject(this);

在需要得到参数的Module里面定义,可完全copy过去,表示才用什么方式去转换参数,本文采用的GSON,写完后再跳转便可得到参数,而且JsonServiceImpl 会打印参数,

// 如果需要传递自定义对象,需要实现 SerializationService,并使用@Route注解标注(方便用户自行选择序列化方式),例如:
@Route(path = "/service/json")
public class JsonServiceImpl implements SerializationService {
    @Override
    public void init(Context context) {

    }

    @Override
    public <T> T json2Object(String text, Class<T> clazz) {
        Log.w("TAG", "text---" + text);
        return new Gson().fromJson(text, clazz);
    }

    @Override
    public String object2Json(Object instance) {
        Log.w("TAG", "Object---" + instance);
        return new Gson().toJson(instance);
    }
}

ARouter不止可以跳转Activity还能跳转fragment

 Fragment mFragment = (Fragment) ARouter.getInstance().build("/home/HomeFragment").navigation();
                getSupportFragmentManager().beginTransaction().replace(R.id.fl, mFragment).commit();

你可能感兴趣的:(路由框架ARouter的初步使用)