IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> ARouter使用(管用) -> 正文阅读

[移动开发]ARouter使用(管用)

背景:
原生的路由(跳转)方案存在的问题:
显示跳转:类依赖耦合严重
隐士跳转:规则集中化管理,协作扩展困难
ARouter由此诞生!
使用:
1 在app的build.gradle中的defaultConfig中

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }


dependencies中

 implementation 'com.alibaba:arouter-api:1.5.2'
 annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'

在这里插入图片描述
2项目的application中

public class WyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        if (isDebug()) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效
            ARouter.openLog();     // 打印日志
            ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        }
        ARouter.init(WyApp.this); // 尽可能早,推荐在Application中初始化
    }

    private boolean isDebug() {
        return true;
    }
}

3MainActivity中(实现跳转到另一个activity)

 public void go(View view) {
        ARouter.getInstance().build("/app/ArouterActivity").navigation();
    }

4ArouterActivity

@Route(path = "/app/ArouterActivity")
public class ArouterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_arouter);
        ARouter.getInstance().inject(this);
    }
}

5 Activity之间携带参数跳转(string)

 ARouter.getInstance().build("/app/ArouterActivity")
                .withString("wy","I am from MainActivity data!")//携带参数跳转
                .navigation();
  @Autowired
    String wy;
  Log.e("wy", "onCreate: "+wy);
@Route(path = "/app/ArouterActivity")
public class ArouterActivity extends AppCompatActivity {
    @Autowired
    String wy;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_arouter);
        ARouter.getInstance().inject(this);
        Log.e("wy", "onCreate: "+wy);
    }
}

6 Activity之间携带参数跳转(自定义对象)

   ARouter.getInstance().build("/app/ArouterActivity")
                .withString("wy","I am from MainActivity data!")//携带参数跳转
                .withSerializable("user",new User("xiaoming",18))
                .navigation();

第二个属性写成
@Autowired
User user;
也行,相当于
@Autowired(name=“user”)
User user;

@Route(path = "/app/ArouterActivity")
public class ArouterActivity extends AppCompatActivity {
    @Autowired
    String wy;

    @Autowired(name="user")
    User mUser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_arouter);
        ARouter.getInstance().inject(this);
        Log.e("wy", "onCreate: "+wy+" user: "+mUser);
    }
}
public class User implements Serializable {
    public String name;
    public int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

在这里插入图片描述
7拦截器的使用:经验:如果拦截器没起作用,卸载重装apk
定义两个拦截器FirstInterceptor,SecondInterceptor ,priority数字越小越选执行

@Interceptor(priority = 1)
public class FirstInterceptor implements IInterceptor {
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
        Log.e("wy", "FirstInterceptor  getPath:" +postcard.getPath()+ " callback:"+callback.toString() );
        callback.onContinue(postcard);

    }

    @Override
    public void init(Context context) {
        Log.e("wy", "FirstInterceptor init: "+context.toString() );

    }
}
@Interceptor(priority = 2)
public class SecondInterceptor implements IInterceptor {
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
        Log.e("wy", "SecondInterceptor process: "+postcard.getPath()+ " callback:"+callback.toString() );
        callback.onContinue(postcard);

//        if ("/app/ArouterActivity".equals(postcard.getPath())) {
//
//            // 这里的弹窗仅做举例,代码写法不具有可参考价值
//            final AlertDialog.Builder ab = new AlertDialog.Builder(postcard.getContext());
//            ab.setCancelable(false);
//            ab.setTitle("温馨提醒");
//            ab.setMessage("想要跳转到Test4Activity么?(触发了\"/inter/test1\"拦截器,拦截了本次跳转)");
//            ab.setNegativeButton("继续", new DialogInterface.OnClickListener() {
//                @Override
//                public void onClick(DialogInterface dialog, int which) {
//                    callback.onContinue(postcard);
//                }
//            });
//            ab.setNeutralButton("算了", new DialogInterface.OnClickListener() {
//                @Override
//                public void onClick(DialogInterface dialog, int which) {
//                    callback.onInterrupt(null);
//                }
//            });
//            ab.setPositiveButton("加点料", new DialogInterface.OnClickListener() {
//                @Override
//                public void onClick(DialogInterface dialog, int which) {
//                    postcard.withString("extra", "我是在拦截器中附加的参数");
//                    callback.onContinue(postcard);
//                }
//            });
//
//            ab.create().show();
//
            MainLooper.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ab.create().show();
                }
            });
//        } else {
//            callback.onContinue(postcard);
//        }

    }

    @Override
    public void init(Context context) {
        Log.e("wy", "SecondInterceptor init: "+context.toString() );

    }
}

看运行日志
在这里插入图片描述
7.1在拦截器中添加参数:参见加点料,原生的跳转方案做不到这一点,只能直接跳转,无法拦截干预!

@Interceptor(priority = 1)
public class FirstInterceptor implements IInterceptor {
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
        Log.e("wy", "FirstInterceptor process getPath:" +postcard.getPath()+ " callback:"+callback.toString() );
//        callback.onContinue(postcard);
        if ("/app/ArouterActivity".equals(postcard.getPath())) {

            // 这里的弹窗仅做举例,代码写法不具有可参考价值
            final AlertDialog.Builder ab = new AlertDialog.Builder(postcard.getContext());
            ab.setCancelable(false);
            ab.setTitle("温馨提醒");
            ab.setMessage("想要跳转到ArouterActivity么?(触发了\"FirstInterceptor\"拦截器,拦截了本次跳转)");
            ab.setNegativeButton("继续", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    callback.onContinue(postcard);
                }
            });
            ab.setNeutralButton("算了", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    callback.onInterrupt(null);
                }
            });
            ab.setPositiveButton("加点料", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    postcard.withString("extra", "我是在拦截器中附加的参数");
                    callback.onContinue(postcard);
                }
            });


            MainLooper.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ab.create().show();
                }
            });
        } else {
            callback.onContinue(postcard);
        }

    }

    @Override
    public void init(Context context) {
        Log.e("wy", "FirstInterceptor init: "+context.toString() );

    }
}

在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:57:11  更:2021-11-16 18:59:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:21:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码