依賴
implementation 'com.alibaba:arouter-api:1.4.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
然后在Application里面進(jìn)行初始化。
if (BuildConfig.DEBUG){
ARouter.openLog();
ARouter.openDebug();
}
ARouter.init(this);
不帶參跳轉(zhuǎn)
ARouter.getInstance()
.build("/main/LogoutActivity")
.navigation();
@Route(path = "/main/LogoutActivity")
public class LogoutActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_out);
}
}
帶參跳轉(zhuǎn)
ARouter.getInstance()
.build("/main/login")
.withString("path","您好")
.navigation();
@Route(path = "/main/login")
public class LoginActivity extends AppCompatActivity {
/*@Autowired
public String path;*/
@Autowired(name = "path")
public String pasts;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.e("zzf","跳轉(zhuǎn)過來了");
ARouter.getInstance().inject(this);
TextView textView = findViewById(R.id.tv);
textView.setText(pasts);
}
}
在這需要注意下面幾點(diǎn):
1、被@Autowired修飾的成員變量不能背pravite修飾,不然運(yùn)行時(shí)會(huì)報(bào)錯(cuò)
2、如果@Autowired沒有指定name,則成員變量的名字必須為傳過來的key,不然沒有效果
@Autowired
public String path
3、如果@Autowired指定name,則成員變量的名字可以隨便寫。
@Autowired(name = "path")
public String pasts;
uri跳轉(zhuǎn)
Uri uri = Uri.parse("test://com/main/UrlLoginActivity");
ARouter.getInstance().build(uri).navigation()
@Route(path = "/main/UrlLoginActivity")
public class UrlLoginActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_url);
}
}
<activity android:name=".UrlLoginActivity">
<intent-filter>
<data android:host="com"
android:scheme="test"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
startActivityForResult
ARouter.getInstance()
.build("/main/ForResultActivity")
.withInt("paths",1)
.navigation(MainActivity.this,0);
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0){
if (resultCode == 1){
btn_ForResult.setText(data.getIntExtra("name",0)+"");
}
}
}
@Route(path = "/main/ForResultActivity")
public class ForResultActivity extends AppCompatActivity {
@Autowired
public int paths;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_for_result);
TextView textView = findViewById(R.id.tv);
textView.setText(paths+"");
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(1,new Intent().putExtra("name",666));
finish();
}
});
}
}
很多博客都說requestCode必須>0
其實(shí)看源碼0是可以的
if (requestCode >= 0) { // Need start for result
if (currentContext instanceof Activity) {
ActivityCompat.startActivityForResult((Activity) currentContext, intent, requestCode, postcard.getOptionsBundle());
} else {
logger.warning(Consts.TAG, "Must use [navigation(activity, ...)] to support [startActivityForResult]");
}
} else {
ActivityCompat.startActivity(currentContext, intent, postcard.getOptionsBundle());
}
跳轉(zhuǎn)攔截
@Interceptor(priority = 1)
public class TestInterceptor implements IInterceptor {
@Override
public void process(Postcard postcard, InterceptorCallback callback) {
if (postcard.getPath().equals("/main/login")){
ARouter.getInstance().build("/app/Mainactivity").navigation();
}else {
callback.onContinue(postcard);
}
}
@Override
public void init(Context context) {
}
}
降級策略
Uri uri = Uri.parse("test://com/main/UrlLoginActivity");
ARouter.getInstance().build(uri).navigation(MainActivity.this, new NavigationCallback() {
@Override
public void onFound(Postcard postcard) {
}
@Override
public void onLost(Postcard postcard) {
/**
* 在這做降級處理,傳遞的path有問題時(shí),我們就可以跳轉(zhuǎn)到其他地方
*/
}
@Override
public void onArrival(Postcard postcard) {
/**
* 跳轉(zhuǎn)成功的回調(diào)
*/
}
@Override
public void onInterrupt(Postcard postcard) {
}
});
}