ARouter的基本使用


添加依赖

implementation 'com.alibaba:arouter-api:1.5.0'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

配置module

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

上代码

App完成初始化工作

public class App extends Application {

    private boolean isDebugArRouter = true;

    private static Context mContext;

    public static Context getContext(){
        return mContext;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
        if (isDebugArRouter){
            ARouter.openDebug();

            ARouter.openLog();
        }
        ARouter.init(App.this);
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        ARouter.getInstance().destroy();
    }
}

BaseActivity 进行Arouter 注入

public class BaseActivity extends AppCompatActivity {

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

拦截器

@Interceptor(priority = 1)//权限 数值越小权限越高
public class UseIInterceptor implements IInterceptor {

    private String TAG = "UseIInterceptor";
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
        if (postcard.getPath().equals("")){
            Log.d(TAG, "process: 你要被拦截了!");
            callback.onInterrupt(new Throwable("未知错误导致被拦截!"));
        }else{
            callback.onContinue(postcard);
        }
    }

    @Override
    public void init(Context context) {
        Log.d(TAG, "init: 初始化拦截器");
    }
}

MainActivity

//路径至少需要两级
@Route(path = Constants.ACTIVITY_URL_MAIN)
public class MainActivity extends BaseActivity {

    private Button button1;

    private String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 =findViewById(R.id.button1);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ARouter.getInstance()
                        .build(Constants.ACTIVITY_URL_TARGET)
                        .withString("text","这是TargetActivity")
                        .withInt("time",3)
                        .navigation(MainActivity.this, 123,new NavigationCallback() {
                            @Override
                            public void onFound(Postcard postcard) {
                                //目标路由被发现时调用
                                Log.d(TAG, "onFound: 发现路由"+postcard.getPath());
                            }

                            @Override
                            public void onLost(Postcard postcard) {
                                //路由丢失后调用
                                Log.d(TAG, "onLost: 路由丢失");
                            }

                            @Override
                            public void onArrival(Postcard postcard) {
                                //路由到达时调用
                                Log.d(TAG, "onArrival: 路由到达");
                            }

                            @Override
                            public void onInterrupt(Postcard postcard) {
                                //路由被拦截后调用
                                Log.d(TAG, "onInterrupt: sorry啊 阁下被拦截了");
                            }
                        });
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case 123:
                Toast.makeText(this,"lalala",Toast.LENGTH_SHORT).show();
                break;
                default:
                    break;
        }
    }
}

TargetActivity

@Route(path = Constants.ACTIVITY_URL_TARGET)
public class TargetActivity extends BaseActivity {

    @Autowired(name = "text")
    String text;

    @Autowired(name = "time")
    int time;

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_target);
        textView = findViewById(R.id.text);
        textView.setText(text+time);
        setResult(123);
    }
}

完事儿~ ==


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM