封装基类

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
    boolean isExit;
    Handler mHandler = new Handler() {


        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            isExit = false;
        }


    };
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //0、初始化基类数据
        initBaseData();


        //1、初始化布局
        setContentView(getRootView());


        //2、初始化控件
        initView();


        //3、初始化数据
        initData();


        //4、初始化点击事件
        initListener();


        //buter
        ButterKnife.bind(this);
    }


    /**
     * 初始化基类数据
     */
    private void initBaseData() {


    }


    /**
     * 初始化布局
     */
    protected abstract int getRootView();


    /**
     * 初始化控件
     */
    protected abstract void initView();


    /**
     * 初始化数据
     */
    protected abstract void initData();


    /**
     * 初始化点击事件
     */
    protected abstract void initListener();




    //可以传数据跳转
    protected void openActivity(Class<?> targetActivity, Bundle bundle) {
        Intent intent = new Intent(this, targetActivity);


        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }


    public void openActivity(Class<?> targetActivityClass) {
        openActivity(targetActivityClass, null);
    }


    //吐司
    protected void showLong(String text) {
        Toast.makeText(this, text, Toast.LENGTH_LONG).show();
    }


    protected void showShort(String text) {
        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }


    /**
     * 注册共性的控件
     */
    private void registComBtn() {
        ImageView back = findViewById(R.id.back_key);
        if (back != null) {
            back.setOnClickListener(this);
        }
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            //大部分都有的控件的点击事件,在基类里处理
            case R.id.back_key://(返回键为例) 生成ids.xml文件
                this.onBackPressed();
                break;


            default:
                processClick(v);
                break;
        }
    }


    protected abstract void processClick(View v);






    /**
     * 实现沉浸式通知栏,使通知栏和APP的标题颜色一样
     */
    protected void immersiveNotification() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //透明状态栏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //透明导航栏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
    }


    public boolean isNetworkAvailable(Activity activity)
    {
        Context context = activity.getApplicationContext();
        // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);


        if (connectivityManager == null)
        {
            return false;
        }
        else
        {
            // 获取NetworkInfo对象
            NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();


            if (networkInfo != null && networkInfo.length > 0)
            {
                for (int i = 0; i < networkInfo.length; i++)
                {
                    System.out.println(i + "===状态===" + networkInfo[i].getState());
                    System.out.println(i + "===类型===" + networkInfo[i].getTypeName());
                    // 判断当前网络状态是否为连接状态
                    if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }


    //点击两次退出
   /* @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exit();
            return false;
        } else {
            return super.onKeyDown(keyCode, event);
        }
    }
    public void exit(){
        if (!isExit) {
            isExit = true;
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
            mHandler.sendEmptyMessageDelayed(0, 2000);
        } else {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            startActivity(intent);
            System.exit(0);
        }
    }*/


}
在Android开发中,使用Kotlin编写Activity的基类可以大大简化代码,提高开发效率。通过封装基类,我们可以集中处理一些通用的逻辑,如生命周期管理、权限请求、事件总线等。 以下是一个简单的Activity基类示例: ```kotlin import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode open class BaseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化布局 setContentView(getLayoutId()) // 初始化视图 initView() // 初始化数据 initData() } override fun onStart() { super.onStart() // 注册事件总线 EventBus.getDefault().register(this) } override fun onStop() { super.onStop() // 取消注册事件总线 EventBus.getDefault().unregister(this) } // 提供一个抽象方法让子类设置布局ID protected abstract fun getLayoutId(): Int // 初始化视图的抽象方法 protected open fun initView() {} // 初始化数据的抽象方法 protected open fun initData() {} // 事件总线接收事件的方法 @Subscribe(threadMode = ThreadMode.MAIN) open fun onEvent(event: Any) {} } ``` 在这个基类中,我们: 1. 继承自`AppCompatActivity`,这是Android推荐的基类。 2. 在`onCreate`方法中调用了三个抽象方法:`getLayoutId()`、`initView()`和`initData()`,让子类可以分别设置布局、初始化视图和初始化数据。 3. 重写了`onStart`和`onStop`方法,用于注册和取消注册EventBus事件总线。 4. 提供了一个`onEvent`方法,用于接收EventBus事件。 使用这个基类,我们的子类可以这样写: ```kotlin class MainActivity : BaseActivity() { override fun getLayoutId(): Int { return R.layout.activity_main } override fun initView() { // 初始化视图 } override fun initData() { // 初始化数据 } @Subscribe(threadMode = ThreadMode.MAIN) fun onEvent(event: Any) { // 处理事件 } } ``` 这样,我们的`MainActivity`就简化了很多,只需要关注具体的实现即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值