package com.songyan.applock;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.Switch;
import android.widget.TextView;
import android.content.Context;
import android.app.ActivityManager;
import java.util.List;
/**
* Created by songyan on 2017/6/7.
*/
public class AppLockActivity extends Activity implements ListView.OnItemClickListener{
private ListView lv_app_lock;
private AppLockAdapter adapter;
private List<AppInfo> list;
private AppInfoProvider provider;
private AppLockDao dao;
private List<String> lockApps;
private ProgressBar progressBar;
//主线程进行UI更新
private Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
progressBar.setVisibility(View.GONE);
adapter=new AppLockAdapter();
lv_app_lock.setAdapter(adapter);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.app_lock);
dao=new AppLockDao(this);
lockApps=dao.getAllPackageName();
lv_app_lock=(ListView)findViewById(R.id.lv_app_lock);
progressBar=(ProgressBar)findViewById(R.id.progress_bar);
lv_app_lock.setOnItemClickListener(this);
provider=new AppInfoProvider(this);
initAppInfos();
}
//开一个新的线程来获取所有的应用信息
private void initAppInfos(){
progressBar.setVisibility(View.VISIBLE);
new Thread(){
@Override
public void run() {
//获取所有应用的信息是一个比较耗时的操作,需要单独开启一个线程来完成,防止主线程卡死
list=provider.getAllApps();
handler.sendEmptyMessage(0);
}
}.start();
}
private class AppLockAdapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
AppInfo info=list.get(position);
if(convertView==null){
View view=View.inflate(AppLockActivity.this,R.layout.app_lock_item,null);
AppViewsHolder viewsHolder=new AppViewsHolder();
//给视图容器里面的视图对象进行初始化,和布局文件中的具体控件进行关联
viewsHolder.iv_app_icon=(ImageView)view.findViewById(R.id.iv_app_lock_icon);
viewsHolder.tv_app_name=(TextView)view.findViewById(R.id.tv_app_lock_name);
viewsHolder.sw_app_lock=(Switch)view.findViewById(R.id.sw_app_lock);
//给视图容器里面的视图对象设置具体的内容
viewsHolder.iv_app_icon.setImageDrawable(info.getIcon());
viewsHolder.tv_app_name.setText(info.getAppName());
if(lockApps.contains(info.getPackageName())){
viewsHolder.sw_app_lock.setChecked(true);
viewsHolder.sw_app_lock.setEnabled(true);
}else{
viewsHolder.sw_app_lock.setChecked(false);
viewsHolder.sw_app_lock.setEnabled(false);
}
//给每个item视图绑定视图容器对象
view.setTag(viewsHolder);
return view;
}
else{
//通过获取已经绑定的convertView可以减少关联布局文件控件的操作,提升ListView的性能
AppViewsHolder viewsHolder=(AppViewsHolder)convertView.getTag();
viewsHolder.iv_app_icon.setImageDrawable(info.getIcon());
viewsHolder.tv_app_name.setText(info.getAppName());
if(lockApps.contains(info.getPackageName())){
viewsHolder.sw_app_lock.setChecked(true);
viewsHolder.sw_app_lock.setEnabled(true);
}else{
viewsHolder.sw_app_lock.setChecked(false);
viewsHolder.sw_app_lock.setEnabled(false);
}
return convertView;
}
}
}
//将布局文件的控件封装成一个控件容器类
private class AppViewsHolder{
ImageView iv_app_icon;
TextView tv_app_name;
Switch sw_app_lock;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
AppInfo info=list.get(position);
String packageName=info.getPackageName();
Switch switchButton=(Switch)view.findViewById(R.id.sw_app_lock);
if(dao.find(packageName)){
dao.delete(packageName);
lockApps.remove(packageName);
switchButton.setChecked(false);
switchButton.setEnabled(false);
}else{
dao.add(info.getPackageName());
lockApps.add(packageName);
switchButton.setChecked(true);
switchButton.setEnabled(true);
}
}
}
ArrayAdapter,SimpleAdapter,BaseAdapter详解 https://www.cnblogs.com/huolan/p/5126794.html
ListView适配器(BaseAdapter)和异步操作(Handler)的使用
最新推荐文章于 2023-01-13 16:18:22 发布