ARouter 的简单使用

简书地址:https://www.jianshu.com/p/2f8a960ac6d8
阿里巴巴开源的路由:https://github.com/alibaba/ARouter

ARouter 在模块化的开发中尤为的重要,为了解耦不在需要依赖另一个模块又能实现模块间的跳转,还未了解的可以点上面的链接去了解,这篇文章只是介绍简单的使用方法。
1.配置:

gradle 插件大于2.2的可以直接配置

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'
    ...
}

注意:是每个需要跳转的 Module 都需要配置。
另外,多模块的时候最好能设置一个全局变量,来控制 各个模块间需要相同的属性。
在全局的 build.gradle 文件中 加入一个 域 如:

    //全局变量
    ext {
        compileSdkVersion = 26
        minSdkVersion = 21
        targetSdkVersion = 26
    }

然后在各个子模块中进行配置:

android {

   compileSdkVersion rootProject.ext.compileSdkVersion
    defaultConfig {
        applicationId "moremodule.com.moremoduledemo"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

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

这样 各个模块的配置就统一了。

2.初始化 ARouter

在 Application 中初始化:

 @Override
    public void onCreate() {
        super.onCreate();
        ARouter.openLog();     // 打印日志
        ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        ARouter.init( this ); // 尽可能早,推荐在Application中初始化
    }
3.在目标页面添加注解
//地址最少两级  /xx/xxx
@Route(path = "/app/Main2Activity")
public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
}

然后在需要跳转的页面发起路由操作

 switch (v.getId()) {
            case R.id.bt_one:
                ActivityOptionsCompat compat = ActivityOptionsCompat.
                        makeScaleUpAnimation(v, v.getWidth() / 2, v.getHeight() / 2, 0, 0);
                ARouter.getInstance()
                        .build("/app/Main2Activity")
                        .withOptionsCompat(compat)//动画效果
                        .navigation();
                break;

如果出现这样的情况一般是:
通常来说这种情况是没有找到目标页面,目标不存在
如果这个页面是存在的,那么您可以按照下面的步骤进行排查
检查目标页面的注解是否配置正确,正确的注解形式应该是 (@Route(path=”/test/test”), 如没有特殊需求,请勿指定group字段,废弃功能)
TIM图片20180325010614.png

4.带值的跳转

支持可以带的值如下:
TIM图片20180325011032.png
例如:

 ARouter.getInstance()
    .build("/One/ModuleOneActivity")
    .withString("test","测试")
    .navigation();

目标页面:

@Route(path = "/One/ModuleOneActivity")
public class ModuleOneActivity extends BaseActivity {
    private Button bt;
    private TextView tv;
    private String test;

    @Override
    protected void initView() {
        bt = findViewById(R.id.bt_module_one);
        tv = findViewById(R.id.tv_module_one);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            tv.setText(test);
            }
        });
    }

    @Override
    protected void setContentView() {
        setContentView(R.layout.activity_module_one);
        Intent intent = getIntent();
        test=intent.getStringExtra("test");
    }
}

这样就得到了传过来的值。

5.Fragment跳转

要跳转到Fragment 只要在关联Fragmentd 的Activity 中获取到 Fragment 就可以了,其他步骤和正常的流程一样:

@Route(path = "/Two/ModuleTwoActivity")
public class ModuleTwoActivity extends BaseActivity {
    private FrameLayout frameLayout;
    private Fragment fragment;

    @Override
    protected void initView() {
        frameLayout = findViewById(R.id.frame_layou);
        FragmentManager manager = getFragmentManager();
        FragmentTransaction fragmentTransaction = manager.beginTransaction();
        fragment = (Fragment) ARouter.getInstance().build("/com/TestFragment").navigation();//获取到 Fragment 不是v4包的
        fragmentTransaction.replace(R.id.frame_layou, fragment);
        fragmentTransaction.commit();
    }
6.通过URL跳转,和获取URL中的参数

可以写一个 URL 接收的中转页面,

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_url2);
        ARouter.getInstance().inject(this);
        Toast.makeText(URLActivity.this,type,Toast.LENGTH_SHORT).show();

    }
}

在 清单文件配置

            <!-- Schame -->
            <intent-filter>
                <data
                    android:host="insane"
                    android:scheme="arouter" />

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>

其中 这里面的 host 、scheme 字段很重要。点击 url 会根据这两个字段会调起本地的 Activity 。如上面那样写就是:

arouter://insane/app/URLActivity?type=test   //type=test 测试获取的参数

app/URLActivity 是目标页面的注解

@Route(path = "/app/URLActivity")
public class URLActivity extends AppCompatActivity {
   //对需要取值的参数加上这个注解,路由才能识别
    @Autowired 
    String type;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_url2);
        ARouter.getInstance().inject(this);  //自动注入
        Toast.makeText(URLActivity.this,type,Toast.LENGTH_SHORT).show();

    }
}

TIM图片20180325012605.png
这样就获取到了。

ARouter 还有很多更厉害的功能,还在逐步学习中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android ARouter 是一个用于实现组件化、模块化开发的路由框架,它提供了一种简单的方式来实现不同组件之间的跳转和通信。 使用 ARouter 的步骤如下: 1. 在项目的 build.gradle 文件中添加依赖: ```groovy implementation 'com.alibaba:arouter-api:x.x.x' annotationProcessor 'com.alibaba:arouter-compiler:x.x.x' ``` 请将 `x.x.x` 替换为最新的版本号。 2. 在需要使用 ARouter 的模块中,创建一个类似于 Application 的类,并在其 `onCreate()` 方法中进行 ARouter 的初始化: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); if (BuildConfig.DEBUG) { ARouter.openLog(); ARouter.openDebug(); } ARouter.init(this); } } ``` 3. 在需要跳转到的目标页面中,使用 `@Route` 注解进行标记,以便 ARouter 进行识别: ```java @Route(path = "/path/to/target") public class TargetActivity extends AppCompatActivity { // ... } ``` 4. 在需要跳转的地方,通过调用 `ARouter.getInstance().build("/path/to/target").navigation()` 来实现页面跳转: ```java ARouter.getInstance().build("/path/to/target").navigation(); ``` 5. 如果需要传递参数,可以使用 `withXxx` 方法来添加参数: ```java ARouter.getInstance() .build("/path/to/target") .withString("key", "value") .navigation(); ``` 通过以上步骤,你就可以在 Android 项目中使用 ARouter 进行页面跳转和参数传递了。当然,ARouter 还提供了其他功能,比如拦截器、URI 跳转等,你可以根据具体需求进行使用。希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值