Android入门之三方库简单使用

166 阅读2分钟

一:ButterKnife

在你的 app 模块的 build.gradle 文件中,添加以下依赖:

implementation 'com.jakewharton:butterknife:10.2.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'

在Activity中

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.textView)
    TextView textView;
    
    @BindString(R.string.login_error) String loginErrorMessage;


    private Unbinder unbinder;

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

        // 进行视图绑定
        unbinder = ButterKnife.bind(this);

        textView.setText("Hello, ButterKnife!");
    }
    
    @OnClick(R.id.button)
    void onButtonClick() { // 处理按钮点击事件 }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        
        // 解除视图绑定
        unbinder.unbind();
    }
}

其他Fragment相关注解使用,参考文章: segmentfault.com/a/119000001…

二:ARouter

在你的 app 模块的 build.gradle 文件中,添加以下依赖:

implementation 'com.alibaba:arouter-api:x.x.x' // 替换为最新版本号
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x' // 替换为最新版本号

在你的 Application 类中进行 ARouter 的初始化配置。在 onCreate 方法中,使用 ARouter.init() 进行初始化:

import android.app.Application;
import com.alibaba.android.arouter.launcher.ARouter;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // 初始化 ARouter
        if (BuildConfig.DEBUG) {
            ARouter.openLog();
            ARouter.openDebug();
        }
        ARouter.init(this);
    }
}

在需要跳转的页面中,使用 @Route 注解定义路由路径。例如:

import com.alibaba.android.arouter.facade.annotation.Route;
import androidx.appcompat.app.AppCompatActivity;

@Route(path = "/app/second")
public class SecondActivity extends AppCompatActivity {
    // ...
}

跳转:

import com.alibaba.android.arouter.launcher.ARouter;

// ...

ARouter.getInstance().build("/app/second").navigation();

传递参数:

MyObject myObject = new MyObject("example", 10);

Bundle bundle = new Bundle(); 
bundle.putString("key", "value"); 
bundle.putInt("count", 5);

ARouter.getInstance()
    .build("/app/second")
    .withString("key", "value")
    .withInt("count", 5)
    .withBoolean("isSpecial", true)
    .withBundle("bundle", bundle)
    .withSerializable("myObject", myObject)
    .navigation();
    
目标页面:
String value = getIntent().getStringExtra("key");
int count = getIntent().getIntExtra("count", 0);
boolean isSpecial = getIntent().getBooleanExtra("isSpecial", false);

Bundle bundle = getIntent().getBundleExtra("bundle");
if (bundle != null) { 
String value = bundle.getString("key"); 
int count = bundle.getInt("count", 0);

MyObject myObject = (MyObject) getIntent().getSerializableExtra("myObject");

}

ARouter 的反向传值:

1、创建拦截器:

import android.content.Context;
import com.alibaba.android.arouter.facade.Postcard;
import com.alibaba.android.arouter.facade.callback.InterceptorCallback;
import com.alibaba.android.arouter.facade.template.IInterceptor;

public class MyInterceptor implements IInterceptor {

    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
        // 拦截目标页面返回操作
        if (postcard.getDestination().getPath().equals("/app/second")) {
            // 在这里处理传递的数据
            // ...

            // 继续执行路由跳转
            callback.onContinue(postcard);
        } else {
            // 不拦截其他页面
            callback.onContinue(postcard);
        }
    }

    @Override
    public void init(Context context) {
        // 初始化操作
    }
}

2、在Application里面注册拦截器

ARouter.getInstance().addInterceptor(new MyInterceptor());

3、在目标页面返回数据

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

    @Override
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("resultData", "Data from SecondActivity");
        setResult(RESULT_OK, intent);
        super.onBackPressed();
    }
}

4、在源页面中,可以在 onActivityResult() 方法中处理目标页面返回的数据。

import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.alibaba.android.arouter.launcher.ARouter;
import com.alibaba.android.arouter.facade.callback.NavigationCallback;

public class MainActivity extends AppCompatActivity {

    // ...

    private void navigateToSecondActivity() {
        ARouter.getInstance().build("/app/second").navigation(this, new NavigationCallback() {
            @Override
            public void onFound(Postcard postcard) {
            }

            @Override
            public void onLost(Postcard postcard) {
            }

            @Override
            public void onArrival(Postcard postcard) {
            }

            @Override
            public void onInterrupt(Postcard postcard) {
                // 目标页面返回时触发,处理返回的数据
                if (postcard.getDestination().getPath().equals("/app/second")) {
                    Bundle extras = postcard.getExtras();
                    if (extras != null) {
                        String resultData = extras.getString("resultData");
                        // 在这里处理返回的数据
                    }
                }
            }
        });
    }
}


ARouter.getInstance().inject(this)` 是 ARouter 库中的一个方法,用于在目标页面中自动完成依赖注入操作。它可以帮助你在目标页面中轻松地获取通过 ARouter 传递的参数,而无需手动解析 Bundle 或 Intent。

三:ButterKnife

四:ButterKnife

五:ButterKnife