ARouter跳转

1.首先 完成组件化
2.在//每一个用的build.都要加

android {
    
    
    defaultConfig {
    
    
        ...
        //每一个用的build.都要加
        javaCompileOptions {
    
    
            annotationProcessorOptions {
    
    
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
}

//是每个模块 和app 的 defaultConfig 内添加
3.每个模块添加依赖

dependencies {
    
    
 
    implementation 'com.alibaba:arouter-api:1.5.1'
	annotationProcessor 'com.alibaba:arouter-compiler:1.5.1'
    
}

4.初始化sdk
创建一个类继承Application
然后再组件内注册

public class App extends Application {
    
    
    @Override
    public void onCreate() {
    
    
        super.onCreate();
       //---------------------------------初始化 1.log日志2.开始调试模式	
        ARouter.openLog();     // 打印日志
        ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        ARouter.init(this); // 尽可能早,推荐在Application中初始化
    }
}

5.添加@Route注解 路径

@Route(path = "/main/MainActivity")

6.添加按钮,按钮点击方法里 写 跳转的方法

 ARouter.getInstance().build("/im/ImActivity").withString("name","贾立超").navigation();

7.前往的页面里添加接受值的注解

	@Autowired
// key名,相对应
   String name;

7.1注入

ARouter.getInstance().inject(this);

8.对象的传递

ARouter.getInstance().build("/app/main3")
                .withString("key3", "888")
                .withObject("test",new Test("hehe","haha")) //对象
                .navigation();

8.1创建一个类实现一个接口SerializationService

@Route(path = "/transerver/gson")
public class JSonBean implements SerializationService {
    
    
    private Gson gson;

    @Override
    public <T> T json2Object(String input, Class<T> clazz) {
    
    
        return gson.fromJson(input,clazz);
    }

    @Override
    public String object2Json(Object instance) {
    
    
        return gson.toJson(instance);
    }

    @Override
    public <T> T parseObject(String input, Type clazz) {
    
    
        return gson.fromJson(input,clazz);
    }

    @Override
    public void init(Context context) {
    
    
        gson = new Gson();
    }
}

9.用路由动态添加fragment
创建fragment

@Route(path = "/fragment/blank")
public class BlankFragment extends Fragment {
    
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
    
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank, container, false);
    }
}

使用路由查找

public void btn3(View view) {
    
    

        Fragment fragment = (Fragment) ARouter.getInstance().build("/fragment/blank").navigation();

       getSupportFragmentManager().beginTransaction().add(R.id.ll,fragment).commit();

10.拦截器的实现
// 比较经典的应用就是在跳转过程中处理登陆事件,这样就不需要在目标页重复做登陆检查
// 拦截器会在跳转之间执行,多个拦截器会按优先级顺序依次执行

@Interceptor(priority = 8, name = "测试用拦截器")
public class TestInterceptor implements IInterceptor {
    
    
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
    
    
    ...
    callback.onContinue(postcard);  // 处理完成,交还控制权
    // callback.onInterrupt(new RuntimeException("我觉得有点异常"));      // 觉得有问题,中断路由流程

    // 以上两种至少需要调用其中一种,否则不会继续路由
    }

    @Override
    public void init(Context context) {
    
    
    // 拦截器的初始化,会在sdk初始化的时候调用该方法,仅会调用一次
    }
}

跳转拦截的代码

ARouter.getInstance().build("/news/main").navigation(this, new NavigationCallback() {
    
    
            @Override
            public void onFound(Postcard postcard) {
    
    

            }

            @Override
            public void onLost(Postcard postcard) {
    
    

            }

            @Override
            public void onArrival(Postcard postcard) {
    
    

            }

            //子线程
            @Override
            public void onInterrupt(Postcard postcard) {
    
    
                runOnUiThread(new Runnable() {
    
    
                    @Override
                    public void run() {
    
    
                        Toast.makeText(MainActivity.this, "拦截了", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });

注:
把一个项目变成一个module
本身的app也要变从module

猜你喜欢

转载自blog.csdn.net/Justinbili/article/details/121919224