Android短信(baseactivity抽取相同代码块,复用代码,减少工作量)短信管家4
从前面的第二第三篇博文我们可以看到他们有相似的功能:
1:发送短信功能
2:接收发送回执的广播接收者
3:注册广播接收者,和unregist 广播接收者
4:保存短信到短信数据库
5:....暂时没了(但是随着以后代码的扩展,如果需要复用的部分,都可以放到基类中去,不是很好吗)
分析一下这么写的好处:
1:代码简洁很多,不需要去写很多重复的代码,达到代码复用的目的
2:给后续开发带来方便(例如我们后续需要使用 发送短信的功能的时候,只要让那个类直接继承我们这个基类就OK了)
3:便于修改代码,如果我们发现某一个地方有问题,我们只需要到基类中修改,不需要每个地方都去修改,提高效率
4:.....好处很多啦,自己想吧,哈哈哈
好了,下面我们就完成一下这样的抽取,把这些功能都拿到一个 BASEACTIVITY中,我们暂时给它取名字叫 BaseMsgActivity。
注意,我们的 BaseMsgActivity 中涉及到1-5的这些方法,或者变量,如果需要给继承的类去使用,那么我们使用 protected关键字,如果不需要提供给子类使用,那么我们使用private关键字,目前,我们没有对外的,所以不需要public关键字,当然更不需要static关键字
我把基类放上来
package com.xiaoxu.message;import java.util.ArrayList;import java.util.List;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.EditText;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.xiaoxu.message.bean.ContactInfo;import com.xiaoxu.message.util.SoundPoolButton;public class NewMessageActivity extends BaseMsgActivity implements OnClickListener {private SoundPoolButton soundpool; private EditText numET;private EditText contentET;private Button addcontact,send,cancel;private List<ContactInfo> select; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_newmessage); soundpool = new SoundPoolButton(this); numET = (EditText) findViewById(R.id.et_number);// 获取2个文本框 contentET = (EditText) findViewById(R.id.et_content); addcontact = (Button) findViewById(R.id.bt_contact); send = (Button) findViewById(R.id.bt_send); cancel = (Button) findViewById(R.id.bt_cancel); addcontact.setOnClickListener(this); send.setOnClickListener(this); cancel.setOnClickListener(this);}@Overridepublic void onClick(View view) {soundpool.play();switch(view.getId()){case R.id.bt_contact:String[] items={"查看全部","查看SIM卡","查看手机"};new AlertDialog.Builder(this) //.setTitle("选择联系人") //.setCancelable(true) //.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {switch(which){case 0:Intent intent = new Intent(NewMessageActivity.this,ContactActivity.class);startActivityForResult(intent, 0);break;case 1:break;case 2:break;}}}) // listener 为OnClickListener 监听器对象, 监听列表项被选中.show();break;case R.id.bt_send:send(numET.getText().toString().trim(),contentET.getText().toString().trim());//TODO 跳转到发送消息页面break;case R.id.bt_cancel:finish();break;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(data!=null){Gson gson = new Gson();//System.out.println(data.getStringExtra("return"));String str = data.getStringExtra("return");select = gson.fromJson(str, new TypeToken<ArrayList<ContactInfo>>(){}.getType());String number = new String();for(int i= 0;i<select.size();i++){if(number!=null&&number.length()>1){number += ";"+select.get(i).getUserNumber();}else{number = select.get(i).getUserNumber();}}number+=";";numET.setText(number);super.onActivityResult(requestCode, resultCode, data);}}}是不是简单了很多哦??
以此类推,那么详细会话页面也就可以精简成这样了。这几天有点忙,所以项目暂时放了几天,到周末会将后续更新代码,以及添加的各个功能。
希望给初学的朋友带来的不仅仅是功能的实现,而是开发过程中的种种收获