如果我们想实现上面的效果该怎么办呢?
首先想到的GridView布局,然后是重写Adapter适配器,并添加点击效果,改变每个Item的状态。因为显示的Item是应用的图标,需要获取应用图标并实时的更新,这里的关键在于Adapter的重写。
1. GridView布局
android:id="@+id/app_deleted_gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="155dp"
android:layout_marginRight="166dp"
android:layout_marginTop="10dp"
android:numColumns="auto_fit"
android:gravity="center"
android:horizontalSpacing="3dp"
android:verticalSpacing="20dp"
android:listSelector="#00000000"
android:stretchMode="columnWidth"
android:columnWidth="160dp"
/>
2. 单项Item效果
http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="@dimen/item_height"
android:background="@drawable/icon_seleted_style"
android:gravity="center"
android:orientation="vertical" >
android:id="@+id/checked_status"
android:src="@drawable/checked_circle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|top"
android:layout_marginRight="6dp"
android:layout_marginTop="-6dp"
android:visibility="invisible"/>
android:id="@+id/list_image"
android:layout_width="@dimen/icon_width"
android:layout_height="@dimen/icon_height"
android:layout_marginTop="-6dp"
/>
android:id="@+id/list_content"
android:layout_marginTop="11dp"
android:layout_marginBottom="8dp"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
3. 重写Adapter,继承BaseAdapter,其中关键的函数是重写getView。
其中在新建Adapter时将要写显示的List数据传入,这样可以在getView时加载数据,我传入的是我自己的一个List,这个list中包含APK应用的信息。
public class AppShowAdapter extends BaseAdapter {
public void setShowFlag(int position,boolean showFlag) {
this.showFlag = showFlag;
ItemStatus cacheStatus = new
ItemStatus();
cacheStatus.appName =
listAppInfos.get(position).getAppName();
cacheStatus.show =
showFlag;
itemStatus.set(position,
cacheStatus);
System.out.println("//更新GridView界面");
notifyDataSetChanged();//更新GridView界面
}
@Override
public View getView(int position, View
convertView, ViewGroup parent) {
// TODO Auto-generated method
stub
System.out.println("status==:"+showFlag+"position==="+position);
AppInfo info =
listAppInfos.get(position);
View view =
View.inflate(context, R.layout.list_view_style, null);
AppManagerViews views = new
AppManagerViews(); views.iv_app_icon = (ImageView)
view.findViewById(R.id.list_image);
views.tv_app_name = (TextView)
view.findViewById(R.id.list_content); ImageView checkImage =
(ImageView)view.findViewById(R.id.checked_status);
//选中效果
if(itemStatus.get(position).show==true){
checkImage.setVisibility(View.VISIBLE);
}else{
checkImage.setVisibility(View.INVISIBLE);
}
views.tv_app_name.setText(info.getAppName()+" "+ getAppSize(info)); views.iv_app_icon.setImageDrawable(info.getIcon());
view.setTag(views);
return view;
}
private class AppManagerViews { ImageView iv_app_icon; TextView
tv_app_name; }
4 Activity 新建Adapter实现效果,并添加单击效果
final AppShowAdapter appShowAdapter = new
AppShowAdapter(UninstallActivity.this, listAppInfos);
GridView appGridView =
(GridView)this.findViewById(R.id.app_deleted_gridview);
appGridView.setAdapter(appShowAdapter);
appGridView.setOnItemClickListener(new
OnItemClickListener() {
public void onItemClick(AdapterView
{
//
TODO Auto-generated method stub
//System.out.println("name="+listAppInfos.get(arg2).getPackageName()+"positions"+arg2);
Uri
packageURI =
Uri.parse("package:"+listAppInfos.get(arg2).getPackageName()); uninstallAppName.add(packageURI);
Intent
uninstallIntent = new Intent(Intent.ACTION_DELETE,
packageURI); //startActivity(uninstallIntent);
if(appShowAdapter.getItemStatus(arg2)==true){
System.out.println("name=======true");
appShowAdapter.setShowFlag(arg2,false);
}else{
appShowAdapter.setShowFlag(arg2,true);
}
}
});
上面的代码就实现了如图所示的效果,我想阐述的是一个思路,细节可以自己去实现,因为不同的程序会有许多不一样的地方,其他人的程序可以借鉴,借鉴思路是什么,细节的地方自己完善。上面的代码还存在的一个问题就是当删除应用之后不能刷新