今天在创建一个窗口的时候老是报错,很少郁闷。
引起错误的代码如下:
new AlertDialog.Builder(AppsInforAdapter.this.mContext) //出错的位置 .setTitle("提示") .setMessage("确认删除该应用吗?") .setCancelable(true) .setNegativeButton("取消", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }) .setPositiveButton("删除", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { uninstallPkg(vh.info.activityInfo.packageName); } }) .show();
刚开始看起来是没有错误的。
但是log提示这个有错误,后来尝试了一下才知道是AppsInforAdapter.this.mContext的问题,但这个尝试是那里来的呢。
构造函数
public AppsInforAdapter(Context applicationContext, List<ResolveInfo> infos) { this.mContext = applicationContext; this.mInfos = infos; }
@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.home); this.loadAPPInfo(); gv_apps = (GridView) findViewById(R.id.apps); gv_apps.setAdapter(new AppsInforAdapter(this.getApplicationContext(),this.infos)); //就是这里参数有问题 }
正确的代码如下:
@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.home); this.loadAPPInfo(); gv_apps = (GridView) findViewById(R.id.apps); gv_apps.setAdapter(new AppsInforAdapter(this,this.infos)); //参数改变了 }
所以不能一味的使用getApplicationContext()方法,要用activity。因为窗口的弹出要有activity。