主要布局文件:

mian.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/hello"    /><GridView android:id="@+id/myGrid"        android:layout_width="fill_parent"     android:layout_height="fill_parent"    android:padding="10dp"    android:verticalSpacing="10dp"    android:horizontalSpacing="10dp"    android:numColumns="auto_fit"    android:columnWidth="60dp"    android:stretchMode="columnWidth"    android:gravity="center"    /> </LinearLayout>

gird_item.xmlbu布局文件如下
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/GridItem"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:orientation="vertical"   android:gravity="center_horizontal"   android:background="#000080">   <imageview android:id="@+id/grid_item_image"      android:layout_width="wrap_content"      android:layout_height="wrap_content">   </imageview>   <textview android:id="@+id/grid_item_text"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="TextView"      android:gravity="center_horizontal"      android:textColor="#000000">   </textview></linearlayout>

与数据库相关的操作

AppsDB.java

package gridview_3.com;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class AppsDB extends SQLiteOpenHelper {    private final static String DATABASE_NAME = "Apps.db";    private final static int DATABASE_VERSION = 1;    private final static String TABLE_NAME = "apps_table";    public final static String APP_ID = "app_id";    public final static String APP_PACKAGENAME = "app_packagename";    public final static String APP_FLAG = "app_flag";    public AppsDB(Context context) {        // TODO Auto-generated constructor stub        super(context, DATABASE_NAME, null, DATABASE_VERSION);    }    // 创建table    @Override    public void onCreate(SQLiteDatabase db) {        String sql = "CREATE TABLE " + TABLE_NAME + " (" + APP_ID                + " INTEGER primary key autoincrement, " + APP_PACKAGENAME                + " text, " + APP_FLAG + " text);";        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;        db.execSQL(sql);        onCreate(db);    }    public Cursor select() {        SQLiteDatabase db = this.getReadableDatabase();        Cursor cursor = db                .query(TABLE_NAME, null, null, null, null, null, null);        return cursor;    }    // 增加操作    public long insert(String packagename, String flag) {        SQLiteDatabase db = this.getWritableDatabase();        /* ContentValues */        ContentValues cv = new ContentValues();        cv.put(APP_PACKAGENAME, packagename);        cv.put(APP_FLAG, flag);        long row = db.insert(TABLE_NAME, null, cv);        return row;    }    // 删除操作    public void delete(String packagename) {        SQLiteDatabase db = this.getWritableDatabase();        String where = APP_PACKAGENAME + " = ?";        String[] whereValue = { packagename };        db.delete(TABLE_NAME, where, whereValue);    }    // 修改操作    public int update(String packagename, String flag) {        SQLiteDatabase db = this.getWritableDatabase();        String where = APP_PACKAGENAME + " = ?";        String[] whereValue = { packagename };        ContentValues cv = new ContentValues();        // cv.put(APP_PACKAGENAME, packagename);        cv.put(APP_FLAG, flag);        int mLine = db.update(TABLE_NAME, cv, where, whereValue);        return mLine;    }}

GridViewTest.java

package gridview_3.com;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Set;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.pm.ResolveInfo;import android.database.Cursor;import android.graphics.Color;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.ImageView.ScaleType;public class GridViewTest extends Activity {    private GridView myGrid;    private List<ResolveInfo> mApps;    @SuppressWarnings({ "unchecked", "rawtypes" })    private List<ResolveInfo> mDisApps = new ArrayList();    private IconsAdapter iconsAdapter = new IconsAdapter(mDisApps);    private AppsDB mAppsDB;    private Cursor mCursor;    @SuppressWarnings("rawtypes")    HashMap hm = new HashMap();    @SuppressWarnings("unchecked")    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        mAppsDB = new AppsDB(this);        mCursor = mAppsDB.select();        loadApps();        getDisApps();        setContentView(R.layout.main);        // mAppsDB = new AppsDB(this);        // mCursor = mAppsDB.select();        myGrid = (GridView) findViewById(R.id.myGrid);        // iconsAdapter = new IconsAdapter(mDisApps);        myGrid.setAdapter(iconsAdapter);        myGrid.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> arg0, View arg1, int index,                    long arg3) {                try {                    Intent it = new Intent(Intent.ACTION_VIEW);                    ComponentName componentName = new ComponentName(mDisApps                            .get(index).activityInfo.packageName, mDisApps                            .get(index).activityInfo.name);                    it.setComponent(componentName);                    startActivity(it);                } catch (Exception e) {                    e.printStackTrace();                }                /*                 * mApps.remove(index);                 * iconsAdapter.notifyDataSetChanged();                 */            }        });        /** 长按改变图标的透明度和标志位 */        myGrid.setOnItemLongClickListener(new OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,                    int index, long arg3) {                Object mPackageName = arg1.getTag();                boolean mFlag = Boolean.parseBoolean(hm.get(mPackageName).toString());                if (mFlag) {                    // mDisApps.get(index).activityInfo.loadIcon(                    // getPackageManager()).setAlpha(100);                    arg1.setBackgroundColor(Color.RED);                    hm.put(mPackageName, false);                    Log.v("长按", "隐藏");                    Log.v("Flag", hm.get(mPackageName).toString());                } else {                    // mDisApps.get(index).activityInfo.loadIcon(                    // getPackageManager()).setAlpha(255);                    arg1.setBackgroundColor(Color.BLACK);                    hm.put(mPackageName, true);                    Log.v("长按", "显示");                    Log.v("Flag", hm.get(mPackageName).toString());                }                return true;            }        });    }    @Override    public void onStop() {        super.onStop();        Log.v("onStop()", "~~~onStop");        @SuppressWarnings("rawtypes")        Set mset = hm.keySet();        /* 保存用户当前的设置 */        for (Object mPackageName : mset) {            /* 果然更新的行数为0,表示用新装载的应用,这要调用insert()方法 */            int mLineNum = mAppsDB.update(mPackageName.toString(),                    hm.get(mPackageName).toString());            mCursor.requery();            if (0 == mLineNum) {                mAppsDB.insert(mPackageName.toString(), hm.get(mPackageName)                        .toString());                mCursor.requery();            }        }        Log.v("onStop()", "~~~onStop~~~~");    }    /** 设置两个按钮,“显示所有”和“显示/隐藏” */    public boolean onCreateOptionsMenu(Menu menu) {        menu.add(0, 0, 0, R.string.all);        menu.add(0, 1, 1, R.string.display_hide);        return super.onCreateOptionsMenu(menu);    }    public boolean onOptionsItemSelected(MenuItem item) {        super.onOptionsItemSelected(item);        switch (item.getItemId()) {        case 0:            iconsAdapter = new IconsAdapter(mApps);            myGrid.setAdapter(iconsAdapter);            break;        case 1:            getDisApps();            iconsAdapter = new IconsAdapter(mDisApps);            myGrid.setAdapter(iconsAdapter);            break;        }        return true;    }    @SuppressWarnings("unchecked")    public void loadApps() {        Intent i = new Intent(Intent.ACTION_MAIN, null);        i.addCategory(Intent.CATEGORY_LAUNCHER);        if (mApps != null) {            mApps.clear();        }        mApps = getPackageManager().queryIntentActivities(i, 0);        /* 重构HashMap,为每个应用程序设置是否显示的标志:true 为显示,false为隐藏 */        if (hm != null) {            hm.clear();        }        for (int i1 = 0; i1 < mApps.size(); i1++) {            hm.put(mApps.get(i1).activityInfo.packageName, true);        }        /* 读取用户之前的设置信息 */        @SuppressWarnings("rawtypes")        Set ms = hm.keySet();        // if ( !mCursor.isNull(1)) {        for (mCursor.moveToFirst(); !(mCursor.isAfterLast()); mCursor                .moveToNext()) {            if (ms.contains(mCursor.getString(1))) {                /* 在hm中存在,这从SQLite中读取并更新hm */                hm.put(mCursor.getString(1), mCursor.getString(2));            } else {                /* 不在hm中,说明用户卸载了应用,应该从SQLite中删除该记录 */                mAppsDB.delete(mCursor.getString(1));                mCursor.requery();            }        }        // }    }    /** 构建显示图标的程序的List */    public void getDisApps() {        if (!mDisApps.isEmpty()) {            mDisApps.clear();        }        for (int i = 0; i < hm.size(); ++i) {            boolean mFlag = Boolean.parseBoolean(hm.get(                    mApps.get(i).activityInfo.packageName).toString());            if (mFlag) {                mDisApps.add(mApps.get(i));            }        }        Log.v("getDisApps()", "msg");    }    public class IconsAdapter extends BaseAdapter {        private List<ResolveInfo> list;        public IconsAdapter(List<ResolveInfo> list) {            super();            this.list = list;        }        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int position) {            return list.get(position);        }        // // 通过这个api来动态通知adapter需要更新界面        // @Override        // public void notifyDataSetChanged() {        // super.notifyDataSetChanged();        // }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ImageView mImageView;            if (null == convertView) {                mImageView = new ImageView(GridViewTest.this);                mImageView.setScaleType(ScaleType.FIT_CENTER);                mImageView.setLayoutParams(new GridView.LayoutParams(50, 50));            } else {                mImageView = (ImageView) convertView;            }            ResolveInfo info = list.get(position);            mImageView.setImageDrawable(info.activityInfo                    .loadIcon(getPackageManager()));            Object mPackageName = info.activityInfo.packageName;            boolean Flag = Boolean.parseBoolean(hm.get(mPackageName).toString());            /* 区别隐藏的图标在显示所用中的不同状态 */            if (Flag) {                mImageView.setBackgroundColor(Color.BLACK);            } else {                mImageView.setBackgroundColor(Color.RED);            }            /* 给在GridView中的显示的每个View调用一个 setTag()方法,用来确定一个应用程序 */            mImageView.setTag(mPackageName);            return mImageView;        }    }}



更多相关文章

  1. android EditText设置不可写
  2. android“设置”里的版本号
  3. 在Fragment中设置控件点击方法,执行失败。
  4. Android(安卓)闹钟管理类的使用
  5. Android设置通知栏/状态栏透明改变通知栏颜色和app最上部分颜色
  6. android 设置中划线 下划线等
  7. Andorid Dialog 示例【慢慢更新】
  8. Android(安卓)P SystemUI之StatusBar UI布局status_bar.xml解析
  9. android图表ichartjs

随机推荐

  1. MySQL临时表
  2. kubernetes-ingress 安装
  3. 如何快速删除卸载残余-注册表
  4. 0319作业
  5. 从键盘输入若干个学生成绩,输入负数作为输
  6. 【案例】使用flex弹性布局仿写移动端苏宁
  7. PHP基础知识:常见运算符、语句分支(模板写
  8. 0325作业
  9. List集合封装获取参数
  10. 0318作业