編輯:關於Android編程
在上一篇博文《Android之——殺死用戶選中的進程(釋放進程占用的空間)》一文中,向大家介紹了如何殺死用戶選中的進程,但是,遺留了一個問題,那就是殺死進程後,ListVIew列表沒有立即刷新,這篇文章我們就來解決這個問題,優化一下ListView的顯示,提升用戶體驗。我們這篇博文同樣是基於上一篇博文來進行優化的,請大家先閱讀上一篇博文《Android之——殺死用戶選中的進程(釋放進程占用的空間)》
這裡,我們主要優化的是TaskManagerActivity類中自定義的適配器類,在這個自定義適配器類中,我們增加了一個屬性字段List
在這個自定義適配器類中,我們增加了一個屬性字段List
具體實現代碼如下:
/**
* 自定義適配器
* @author liuyazhuang
*
*/
private class TaskManagerAdapter extends BaseAdapter{
private LayoutInflater mInflater;
private List infos;
public void setInfos(List infos) {
this.infos = infos;
}
public TaskManagerAdapter(){
mInflater = getLayoutInflater();
}
@Override
public int getCount() {
return infos.size();
}
@Override
public Object getItem(int position) {
return infos.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ViewHolder holder = null;
if(convertView != null){
view = convertView;
holder = (ViewHolder) view.getTag();
}else{
view = mInflater.inflate(R.layout.task_manager_item, null);
holder = new ViewHolder();
holder.iv_task_manager_icon = (ImageView) view.findViewById(R.id.iv_task_manager_icon);
holder.iv_task_manager_name = (TextView) view.findViewById(R.id.tv_task_manager_name);
holder.iv_task_manager_memory = (TextView) view.findViewById(R.id.tv_task_manager_memory);
//獲取到UI上的CheckBox控件
holder.cb_task_manager_selected = (CheckBox) view.findViewById(R.id.cb_task_manager_selected);
view.setTag(holder);
}
TaskInfo taskInfo = infos.get(position);
holder.iv_task_manager_icon.setImageDrawable(taskInfo.getTask_icon());
holder.iv_task_manager_memory.setText(占用的內存:+TextFormat.formatByte(taskInfo.getTask_memory()*1024));
holder.iv_task_manager_name.setText(taskInfo.getTask_name());
String packageName = taskInfo.getPackageName();
//應用程序是當前運行的程序
if(packageName.equals(getPackageName())){
holder.cb_task_manager_selected.setVisibility(View.GONE);
}else{
holder.cb_task_manager_selected.setVisibility(View.VISIBLE);
}
//獲取條目的選中狀態
boolean isChecked = taskInfo.isChecked();
if(isChecked){
holder.cb_task_manager_selected.setChecked(true);
}else{
holder.cb_task_manager_selected.setChecked(false);
}
return view;
}
}
這裡由於我們更新了自定義適配器類,其中顯示的數據設置方式發生了變化,所以,我們也要更新一下默認進程列表的顯示方式,我們在Handler實例化自定義適配器類TaskManagerAdapter後,需要手動將進程列表集合set到這個類中的list屬性字段中,然後調用ListView的notifyDataSetChanged()方法刷新列表顯示。
具體代碼如下:
private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case SUCCESS_GETTASKINFO:
long total = TaskUtils.getAvailMem(TaskManagerActivity.this);
for(TaskInfo info : taskInfos){
total += info.getTask_memory() * 1024;
}
//可用內存
String availMemStr = TextFormat.formatByte(TaskUtils.getAvailMem(TaskManagerActivity.this));
//總內存
String totalMemStr = TextFormat.formatByte(total);
tv_task_manager_task_memory.setText(可用/總內存:+availMemStr+/+totalMemStr);
mAdapter = new TaskManagerAdapter();
mAdapter.setInfos(taskInfos);
rl_loading.setVisibility(View.GONE);
lv_taskmanage.setAdapter(mAdapter);
break;
default:
break;
}
};
};
在這個方法中,我們新創建了一個list集合,用來存放沒有被殺死的進程,處理完後,將這個沒有被殺死的進程集合set給自定義適配器類TaskManagerAdapter的list集合,然後調用ListView的notifyDataSetChanged()方法刷新列表顯示。
注意:遍歷集合的時候,是不能對集合進行增、刪、改操作的。
具體代碼如下:
/**
* 殺死進程
* @param v
*/
public void kill_process(View v){
//存放沒有被殺死的進程
List newTaskInfos = new ArrayList();
for(TaskInfo taskInfo : taskInfos){
if(taskInfo.isChecked()){
//殺死選中的進程
am.killBackgroundProcesses(taskInfo.getPackageName());
}else{
newTaskInfos.add(taskInfo);
}
}
mAdapter.setInfos(newTaskInfos);
mAdapter.notifyDataSetChanged();
}


本實例中,為了方面,我把一些文字直接寫在了布局文件中和相關的類中,大家在真實的項目中要把這些文字寫在string.xml文件中,在外部引用這些資源,切記,這是作為一個Android程序員最基本的開發常識和規范,我在這裡只是為了方便直接寫在了類和布局文件中。
【Android藍牙開發】手機藍牙與下位機HC-05藍牙模塊通信系統
本文根據自己的實踐總結而來,參考前人博客之余,也自己總結和開發了一些功能,在這裡給自己備份也分享給大家。不同之處在於:自動打開並搜索藍牙、修改藍牙名字、完整接收藍牙傳輸
android開發游記:RecycleView 實現復雜首頁布局三種方式
做過電商類應用的朋友可能都會遇到一個比較頭疼的問題:復雜的首頁布局如何實現。參考百度糯米,美團,bilibili等應用,都會發現其首頁的布局相對復雜,例如下圖bilibi
android BaseAdapter多布局緩存
ListView是App開發中最常見的控件之一了,與之相隨的則是BaseAdapter的使用,BaseAdapter的作用則是為我們的ListView提供數據源,普通的用
安卓系統短信源碼依賴庫、可運行的源碼
新項目需要做短信模塊功能,此短信模塊非安卓系統短信模塊,是利用了360張勇主導的開源框架,進行URL攔截,剝離出來的短信模塊第一步:去下載安卓系統源碼,通過對比4.4和4