package com.example.intenttest;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends Activity implements android.view.View.OnClickListener{
EditText editText;
GridView allApps;
TextView noResult;
ImageView clear;
List<ResolveInfo> mApps;
GridViewAdapter adapter;
List<ResolveInfo> mSelectedApps = new ArrayList<ResolveInfo>();
List<ResolveInfo> mClickedApps = new ArrayList<ResolveInfo>();
SearchBarDataBaseHelper dbHelper;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.searchbar);
initView();
loadApps();
initDataBase();
mSelectedApps = mClickedApps;
refreshAdapter();
editText.addTextChangedListener(new TextWatcher() {
// private int editStart ;
// private int editEnd ;
//这里监听EditText的内容变化
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
if(start == 0&&count == 0&&before == 1){
mSelectedApps.clear();
initDataBase();
mSelectedApps = mClickedApps;
noResult.setVisibility(View.INVISIBLE);
refreshAdapter();
}
else{
mSelectedApps.clear();
for(int i = 0; i < mApps.size(); i++){
if(mApps.get(i).activityInfo.loadLabel(getPackageManager()).toString().contains(s)){
mSelectedApps.add(mApps.get(i));
}
}
if(mSelectedApps.size() == 0){
System.out.println("找不到匹配的搜索结果!");
noResult.setVisibility(View.VISIBLE);
}
refreshAdapter();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
allApps.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
ResolveInfo info = mSelectedApps.get(arg2);
//该应用的包名
boolean b = false;
Cursor c = db.query("table_apps", null,null,null,null,null,null);
while(c.moveToNext()){
String s = c.getString(c.getColumnIndex("name"));
if(s.equals(info.activityInfo.loadLabel(getPackageManager()))){
b = true;
}
}
//保存应用名称到搜索记录中去
ContentValues values = new ContentValues();
if(!b){
values.put("name", (String) info.activityInfo.loadLabel(getPackageManager()));
db.insert("table_apps", null, values);
}
String pkg = info.activityInfo.packageName;
//应用的主activity类
String cls = info.activityInfo.name;
ComponentName componet = new ComponentName(pkg, cls);
Intent i = new Intent();
i.setComponent(componet);
startActivity(i);
MainActivity.this.finish();
}
});
}
private void refreshAdapter() {
// 刷新适配器的数据
adapter = new GridViewAdapter(MainActivity.this);
allApps.setAdapter(adapter);
}
private void initDataBase() {
// TODO Auto-generated method stub
//从数据库中读取上次搜索的数据
dbHelper = new SearchBarDataBaseHelper(MainActivity.this, "database", null, 1);
db = dbHelper.getWritableDatabase();
db.execSQL("CREATE TABLE IF NOT EXISTS table_apps (name varchar(20))");
Cursor c = db.query("table_apps", null,null,null,null,null,null);
while(c.moveToNext()){
String s = c.getString(c.getColumnIndex("name"));
for (int i = 0; i < mApps.size(); i++) {
if(mApps.get(i).activityInfo.loadLabel(getPackageManager()).equals(s)){
mClickedApps.add(mApps.get(i));
}
}
}
}
private void initView(){
noResult = (TextView)findViewById(R.id.no_result);
editText = (EditText)findViewById(R.id.searchbar);
allApps = (GridView)findViewById(R.id.show_searched_apps);
clear = (ImageView)findViewById(R.id.clear);
clear.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.clear :
db.delete("table_apps", null,null);
mSelectedApps.clear();
refreshAdapter();
break;
case R.id.searchbar:
break;
}
}
class GridViewAdapter extends BaseAdapter{
LayoutInflater inflater;
Context context;
public GridViewAdapter(Context context){
inflater = LayoutInflater.from(context);
}
@Override
public final int getCount() {
return mSelectedApps.size();
}
@Override
public final Object getItem(int position) {
return mSelectedApps.get(position);
}
@Override
public final long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = inflater.inflate(R.layout.searchbar_items,null);
holder.tv = (TextView)convertView.findViewById(R.id.apps_name);
holder.iv = (ImageView)convertView.findViewById(R.id.apps_icon);
convertView.setTag(holder);
}
else{
holder = (Holder)convertView.getTag();
}
ResolveInfo info = mSelectedApps.get(position);
String s1 = info.activityInfo.loadLabel(getPackageManager()).toString().trim();
holder.iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
holder.tv.setText(s1);
return convertView;
}
}
public static class Holder{
public ImageView iv;
public TextView tv;
}
private void loadApps() {
//获得所有app的数据
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
}
}
第一次发表这类文章,希望自己以后不要再忘记baseAdapter和Database的使用方法了!