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