抽象类BaseActivity的封装

将BaseActivity设置为抽象类,其他子Activity继承BaseActivity,优点:
1)简化子类代码复杂度(共性方法)
通过继承机制,在基类中封装好默认需实现的共性方法,可以减少子类编写重复代码的工作量,使子类专注于自己的特有功能,也提高了代码可读性、可维护性。
2) 强制规范子类行为
通过将BaseActivity设置为抽象类,预先定义好需要实现的方法强制子类实现相关方法,提高代码规范性(继承机制)。 
3)作为UI框架实现页面嵌套
通过在BaseActivity中定义外层界面,子类Activity继承后,可以直接调用父类的方法实现页面嵌套。
4) 常见用法
利用Inflater机制实现页面嵌套.得益于Android的Inflater机制,子类中通过Inflater实现对父类中的View的填充,类似于页面嵌套,或者是向UI框架填充相应的内容。

在BaseActivity的onCreate()中调用抽象方法
抽象类BaseActivity不需要在AndroidManifest.xml配置,它不是具体的类。

继承于一个类,让它成为抽象类,加上一些初始化的抽象方法,这样子类在继承这个类的时候就必须去实现这些抽象方法,就不用我们去手动添加,这样也不会让我们丢失了一些操作,如初始化等,而且在抽象类中把这些初始化的方法添加到了onCreate()方法中,这样我们的子类只要继承于BaseActivity,有以下两点好处:
1)肯定我们不用再去手动添加实现findViews() init() setLinsteners()这些初始化方法了

2)我们不用再在每个Activity中手动调用这三个方法,因为我们的BaseActivity已经为我们做好了封装,只要重写这三个抽象方法就好了就好了


代码如下:Dagger2+BufferKnife

package com.example.administrator.myapplication.Base;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.example.administrator.myapplication.dagger.component.ActivityComponent;
import com.example.administrator.myapplication.dagger.component.DaggerActivityComponent;
import com.example.administrator.myapplication.dagger.module.ActivityModule;

import butterknife.ButterKnife;

/**
 * Created on 2017/5/10.
 * Author:crs
 * Description:BaseActivity抽象父类
 */
public abstract class BaseActivity extends AppCompatActivity {

    private static final String TAG = "BaseActivity";
    public Context mContext;
    ActivityComponent mActivityComponent;

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

        mActivityComponent = DaggerActivityComponent.builder().activityModule(new ActivityModule(this)).build();
        mContext = this;
        setContentView();
        //ButterKnife,this指代子Activity
        ButterKnife.bind(this);
        //Log.i(TAG,this+"");  MainActivity@53538dd8
        //Dagger2
        initInject();
        init();
    }

    //依赖注入
    public abstract void initInject();

    //设置布局
    public abstract void setContentView();

    //初始化控件
    public abstract void init();

    //通用性方法
    public void showToast(String msg) {
        Toast.makeText(BaseActivity.this, msg, Toast.LENGTH_SHORT).show();
    }

    //子Activity通过此ActivityComponent进行依赖注入
    public ActivityComponent getActivityComponent() {
        return mActivityComponent;
    }
}
MainActivity中的代码:

package com.example.administrator.myapplication;

import android.widget.TextView;

import com.example.administrator.myapplication.Base.BaseActivity;

import butterknife.BindView;
import butterknife.OnClick;


public class MainActivity extends BaseActivity  {

    //此方法已经不需要,调用默认的就可以了。
    //@Override
    //protected void onCreate(Bundle savedInstanceState) {
    //   super.onCreate(savedInstanceState);
    //    ButterKnife.bind(this);
    //}

    @BindView(R.id.tv_content)
    TextView tv_content;

    @Override
    public void initInject() {
        //注入当前Activity,mActivityComponent()封装在父类中;
        //ActivityComponent文件中:连接器
        //ActivityModule:主要用于提供presenter类的对象,方法有参数,是通过构造函数提供的对象。
        getActivityComponent().inject(this);
    }

    @Override
    public void setContentView() {
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public void init() {
        
    }
    
    @OnClick(R.id.btn)
    public void loadData(){

    }
}

ActivityComponent中的代码:

package com.example.administrator.myapplication.dagger.component;

;

import com.example.administrator.myapplication.MainActivity;
import com.example.administrator.myapplication.dagger.module.ActivityModule;

import dagger.Component;

/**
 * Created on 2017/5/10.
 * Author:crs
 * Description:ActivityComponent连接器
 */
@Component(modules = {ActivityModule.class})
public interface ActivityComponent {

    //注入MainActivity
    void inject(MainActivity activity);
}
ActivityModule中的代码:

package com.example.administrator.myapplication.dagger.module;


import android.app.Activity;

import dagger.Module;
import dagger.Provides;

/**
 * Created on 2017/5/10.
 * Author:crs
 * Description:ActivityModule,自定义module类
 */
@Module
public class ActivityModule {

    private Activity mActivity;

    public ActivityModule(Activity activity) {
        this.mActivity = activity;
    }

    @Provides
    public Activity provideActivity() {
        return mActivity;
    }
}

//添加日志拦截器:看看效果

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();

interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

okHttpClientBuilder.addInterceptor(interceptor);

 

添加依赖的方式,而非导入jar包,否则可能导致方法数超过65535,导致apk过大。

对项目依赖的管理:

compile 'com.alibaba:fastjson:1.2.37'

compile 'com.squareup.okhttp3:okhttp:3.3.1'

compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'

compile 'com.squareup.okio:okio:1.13.0'

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

 

类头注释:

/**

 * Created on ${DATE}.

 * Author:crs

 * Description:

 */

 

项目里面已经使用了Bufferknife所以就不需要在使用

setOnClistenerListenerthisLoginAct里面有很多冗余的代码(版本维护的时候进行删除)

 

在父类里面封装了加载对话框以及隐藏对话框的操作。

 

项目里的初始化方法:父类BaseActivity里面的抽象方法

getLayoutId()

initParams()


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值