您的位置:首页 > 移动开发 > Android开发

Android Activity基类封装

2016-08-15 23:28 405 查看

编写一个Activity基类,对Activity进行封装,方便使用,参考知乎上一个帖子,可以点击这里查看

1、新建抽象类ParentActivity继承AppCompatActivity,并实现OnClickListener接口

public abstract class ParentActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO
}

@Override
public void onClick(View v) {
// TODO
}
}


2、编写几个子类必须实现的抽象方法

/**
* 设置ContentView
* @return R.layout.xxx
*/
protected abstract int getLayoutId();

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

/**
* add Listener
*/
protected abstract void setListener();

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

/**
* view点击
* @param v
*/
public abstract void widgetClick(View v);


3、调用,顺序基本是设置布局,加载布局,事件监听,初始化数据,点击时加入了防止快速点击

public abstract class ParentActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
initView();
setListener();
initData();
}

@Override
public void onClick(View v) {
if (fastClick())
widgetClick(v);
}

private long lastClick = 0;
private boolean fastClick() {
if (System.currentTimeMillis() - lastClick <= 1000) {
return false;
}
lastClick = System.currentTimeMillis();
return true;
}
}


4、添加title,这里没在基类写死,子类可以直接使用这个,也可以重写父类方法,写成是这里使用了Toolbar,可以自己定义

// 通用title
protected void $setToolBar() {
Toolbar toolbar = $findViewById(R.id.toolbar);
toolbar.setTitle("");
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.back);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}


5、加入一些使用多,通用功能

// findViewById
public <T extends View> T $findViewById(int resId) {
return (T) findViewById(resId);
}

// Toast
protected void $toast(CharSequence msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

// Toast
protected void $toast(int resId) {
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
}

protected boolean isDebug = true;
// Log
protected void $Log(String msg) {
if (isDebug) {
Log.d(this.getClass().getName(), msg);
}
}


6、startActivity通用样式编写

// startActivity
protected void $startActivity(Class<?> cls, Bundle bundle) {
Intent intent = new Intent(this, cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivity(intent);
}

// startActivity
protected void $startActivity(Class<?> cls) {
$startActivity(cls, null);
}

// startActivityForResult
protected void $startActivityForResult(Class<?> cls, Bundle bundle, int requestCode) {
Intent intent = new Intent(this, cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivityForResult(intent, requestCode);
}

// startActivityForResult
protected void $startActivityForResult(Class<?> cls, int requestCode) {
$startActivityForResult(cls, null, requestCode);
}

// getIntent
protected Bundle $getIntentExtra() {
Intent intent = getIntent();
Bundle bundle = null;
if (null != intent)
bundle = intent.getExtras();
return bundle;
}


上面简单的进行了封装,有许多不足之处,参考一下,自己根据实际情况再封装一下。

源码以及Demo地址:https://github.com/YBill/EncapsulateActivity
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android Activity