編輯:關於android開發
CallSafeActivity .java
public class CallSafeActivity extends Activity { private ListView list_view; private List<BlackNumberInfo> blackNumberInfos; private LinearLayout ll_pb; private BlackNumberDao dao; private CallSafeAdapter adapter; /** * 當前頁面 */ private int mCurrentPageNumber = 0; /** * 每頁展示20條數據 */ private int mPageSize = 20; private TextView tv_page_numbeer; /** * 一共有多少頁面 */ private int totalPage; private EditText et_page_number; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_callsafe); initUI(); initData(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { ll_pb.setVisibility(View.INVISIBLE); tv_page_numbeer.setText(mCurrentPageNumber +"/"+ totalPage ); adapter = new CallSafeAdapter(blackNumberInfos, CallSafeActivity.this); list_view.setAdapter(adapter); } }; private void initData() { new Thread() { @Override public void run() { dao = new BlackNumberDao(CallSafeActivity.this); //通過總的記錄數 / 每頁多少條數據 totalPage = dao.getTotalNumber() / mPageSize; System.out.println("總的頁碼=="+totalPage); blackNumberInfos = dao.findBar(mCurrentPageNumber, mPageSize); handler.sendEmptyMessage(0); } }.start(); } /** * 添加黑名單 * * @param view */ public void addBlackNumber(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(this); final AlertDialog dialog = builder.create(); View dialog_view = View.inflate(this, R.layout.dialog_add_blacknumber, null); final EditText et_number = (EditText) dialog_view.findViewById(R.id.et_number); Button btn_ok = (Button) dialog_view.findViewById(R.id.btn_ok); Button btn_cancel = (Button) dialog_view.findViewById(R.id.btn_cancel); final CheckBox cb_phone = (CheckBox) dialog_view.findViewById(R.id.cb_phone); final CheckBox cb_sms = (CheckBox) dialog_view.findViewById(R.id.cb_message); btn_cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); btn_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str_number = et_number.getText().toString().trim(); if(TextUtils.isEmpty(str_number)){ Toast.makeText(CallSafeActivity.this,"請輸入黑名單號碼",Toast.LENGTH_SHORT).show(); return; } String mode = ""; if(cb_phone.isChecked()&& cb_sms.isChecked()){ mode = "1"; }else if(cb_phone.isChecked()){ mode = "2"; }else if(cb_sms.isChecked()){ mode = "3"; }else{ Toast.makeText(CallSafeActivity.this,"請勾選攔截模式",Toast.LENGTH_SHORT).show(); return; } BlackNumberInfo blackNumberInfo = new BlackNumberInfo(); blackNumberInfo.setNumber(str_number); blackNumberInfo.setMode(mode); blackNumberInfos.add(0,blackNumberInfo); //把電話號碼和攔截模式添加到數據庫。 dao.add(str_number,mode); if(adapter == null){ adapter = new CallSafeAdapter(blackNumberInfos, CallSafeActivity.this); list_view.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } dialog.dismiss(); } }); dialog.setView(dialog_view); dialog.show(); } private void initUI() { ll_pb = (LinearLayout) findViewById(R.id.ll_pb); //展示加載的圓圈 ll_pb.setVisibility(View.VISIBLE); list_view = (ListView) findViewById(R.id.list_view); tv_page_numbeer = (TextView) findViewById(R.id.tv_page_numbeer); et_page_number = (EditText) findViewById(R.id.et_page_number); } private class CallSafeAdapter extends MyBaseAdapter<BlackNumberInfo> { private CallSafeAdapter(List lists, Context mContext) { super(lists, mContext); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = View.inflate(CallSafeActivity.this, R.layout.item_callsafe, null); holder = new ViewHolder(); holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number); holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode); holder.iv_delete = (ImageView) convertView.findViewById(R.id.iv_delete); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv_number.setText(lists.get(position).getNumber()); String mode = lists.get(position).getMode(); if (mode.equals("1")) { holder.tv_mode.setText("來電攔截+短信"); } else if (mode.equals("2")) { holder.tv_mode.setText("電話攔截"); } else if (mode.equals("3")) { holder.tv_mode.setText("短信攔截"); } final BlackNumberInfo info = lists.get(position); holder.iv_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String number = info.getNumber(); boolean result = dao.delete(number); if(result){ Toast.makeText(CallSafeActivity.this,"刪除成功",Toast.LENGTH_SHORT).show(); lists.remove(info); //刷新界面 adapter.notifyDataSetChanged(); }else{ Toast.makeText(CallSafeActivity.this,"刪除失敗",Toast.LENGTH_SHORT).show(); } } }); return convertView; } } static class ViewHolder { TextView tv_number; TextView tv_mode; ImageView iv_delete; } /** * 上一頁 * * @param view */ public void prePage(View view) { if (mCurrentPageNumber <= 0) { Toast.makeText(this, "已經是第一頁了", Toast.LENGTH_SHORT).show(); return; } mCurrentPageNumber--; initData(); } /** * 下一頁 * * @param view */ public void nextPage(View view) { //判斷當前的頁碼不能大於總的頁數 if (mCurrentPageNumber >= (totalPage - 1)) { Toast.makeText(this, "已經是最後一頁了", Toast.LENGTH_SHORT).show(); return; } mCurrentPageNumber++; initData(); } /** * 跳轉 * * @param view */ public void jump(View view) { String str_page_number = et_page_number.getText().toString().trim(); if(TextUtils.isEmpty(str_page_number)){ Toast.makeText(this,"請輸入正確的頁碼",Toast.LENGTH_SHORT).show(); }else{ int number = Integer.parseInt(str_page_number); if(number >=0 && number <= (totalPage - 1) ){ mCurrentPageNumber = number; initData(); }else{ Toast.makeText(this,"請輸入正確的頁碼",Toast.LENGTH_SHORT).show(); } } } }
dialog_add_blacknumber.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="添加黑名單" android:textSize="30sp" /> <EditText android:id="@+id/et_black" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入黑名單" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <CheckBox android:id="@+id/cb_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="短信攔截" /> <CheckBox android:id="@+id/cb_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="電話攔截" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/bt_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="確定" /> <Button android:id="@+id/bt_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="取消" /> </LinearLayout> </LinearLayout>
MyBaseAdapter.java
public abstract class MyBaseAdapter<T> extends BaseAdapter { public List<T> lists; public Context mContext; public MyBaseAdapter() { super(); // TODO Auto-generated constructor stub } public MyBaseAdapter(List<T> lists,Context mContext) { this.lists = lists; this.mContext = mContext; } @Override public int getCount() { // TODO Auto-generated method stub return lists.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return lists.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } }
activity_callsafe.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
><FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="11"> <LinearLayout android:id="@+id/ll_pb" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:visibility="invisible" > <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="玩命加載中..." /> </LinearLayout> <include//這樣寫list view是為了在一個項目中,為了美觀整體性,list view基本上都要一致 android:id="@+id/list_view" layout="@layout/list_view"></include> </FrameLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:onClick="prePage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上一頁" android:layout_weight="1"/> <Button android:onClick="nextPage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一頁" android:layout_weight="1"/> <Button android:onClick="jump" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳轉" android:layout_weight="1"/> <EditText android:id="@+id/et_page_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:id="@+id/tv_page_numbeer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0/10" android:textSize="18sp" android:layout_weight="1"/> </LinearLayout> </LinearLayout>
list_view.xml
<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </ListView>
BlackNumberDao.java 對表進行增刪改查
//建立黑名單的數據庫 public class BlackNumberDao { private BlackNumberOpenHelper helper; public BlackNumberDao(Context context) { helper = new BlackNumberOpenHelper(context); } // 黑名單號碼和攔截模式 public boolean add(String number, String mode) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("number", number); contentValues.put("mode", mode); long rowid = db.insert("blacknumber", null, contentValues); if (rowid == -1) { return false; } else { return true; } } // 通過電話號碼刪除 public boolean delete(String number) { SQLiteDatabase db = helper.getWritableDatabase(); // 所影響的行數 int rownumber = db.delete("blacknumber", "number", new String[] { number }); if (rownumber == 0) { return false; } else { return true; } } // 通過電話號碼修改攔截的模式 public boolean changeNumberMode(String number, String mode) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("mode", mode); int rownumber = db.update("blacknumber", contentValues, number, new String[] { number }); if (rownumber == 0) { return false; } else { return true; } } // 返回一個黑名單號碼攔截模式 public String findNumber(String number) { String mode = ""; SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query("blacknumber", new String[] { mode }, "number=?", new String[] { number }, null, null, null); if (cursor.moveToNext()) { mode = cursor.getString(0); } cursor.close(); db.close(); return mode; } // 查找所有的黑名單 public List<BlackNumberInfo> findAll() { SQLiteDatabase db = helper.getReadableDatabase(); List<BlackNumberInfo> blackNumberInfos = new ArrayList<BlackNumberInfo>(); Cursor cursor = db.query("blacknumber", new String[] { "number", "mode" }, null, null, null, null, null); while (cursor.moveToNext()) { BlackNumberInfo info = new BlackNumberInfo(); info.setNumber(cursor.getString(0)); info.setMode(cursor.getString(1)); blackNumberInfos.add(info); } cursor.close(); db.close(); return blackNumberInfos; } // 進行分頁處理,pageNumber當前是哪一頁,pageSize每頁顯示多少數據,offset表示跳過,從第幾條開始 public List<BlackNumberInfo> findBar(int pageNumber, int pageSize) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from blacknumber limit ? offset ?", new String[] { String.valueOf(pageSize), String.valueOf(pageSize * pageNumber) }); List<BlackNumberInfo> blackNumberInfos = new ArrayList<BlackNumberInfo>(); while (cursor.moveToNext()) { BlackNumberInfo blackNumberInfo = new BlackNumberInfo(); blackNumberInfo.setMode(cursor.getString(1)); blackNumberInfo.setNumber(cursor.getString(0)); blackNumberInfos.add(blackNumberInfo); } cursor.close(); db.close(); return blackNumberInfos; }
/**
* 獲取總的記錄數
* @return
*/
public int getTotalNumber(){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select count(*) from blacknumber", null);
cursor.moveToNext();
int count = cursor.getInt(0);
cursor.close();
db.close();
return count;
}
}
BlackNumberOpenHelper.java //創建了庫和表
public class BlackNumberOpenHelper extends SQLiteOpenHelper { public BlackNumberOpenHelper(Context context) { super(context, "safe.db", null, 1); //safe.db,創建的數據庫的名字 } /** * 主鍵,電話號碼,攔截模式:電話/短信攔截 */ @Override public void onCreate(SQLiteDatabase db) { // 創建表 db.execSQL("create table blacknumber (_id integer primary key autoincrement,number varchar(20),mode varchar(2))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 更新表 } }
BlackNumberInfo .java
//JavaBean對象 public class BlackNumberInfo { private String number;//黑名單電話號碼 private String mode;//黑名單攔截模式 //電話攔截+短信攔截 public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getMode() { return mode; } public void setMode(String mode) { this.mode = mode; } }
翻翻git之---一個豐富的通知的工具庫 NotifyUtil P2 正菜環節 今天上的是一個通知的工具庫,作者寫的比較全,使用起來頁比較方便,而且內容少,直接Co
Android手機輸入法按鍵監聽-dispatchKeyEvent 最近在項目開發中遇到一個關於手機輸入鍵盤的坑,特來記錄下。 應用場景: 項目中有一個界面是用viewp
Android面試題--事件處理,android試題--事件1、Handler 機制 Android 中主線程也叫 UI 線程,那麼從名字上我們也知道主線程主要是用來創建
Android動畫效果生動有趣的通知NiftyNotification(Android Toast替代品),androidnotificationNiftyNotific