异常情况
当点击第二次弹出对话框时,会退出Android程序,出现以下异常
解决方法
@Override
public void onItemClick(final AdapterView<?> parent, View view, final int position, long id) {
final AlertDialog ad = new AlertDialog.Builder(getActivity()).setView(dialog_buy).create();
ad.show();
Button btn_yes = dialog_buy.findViewById(R.id.yes);
Button btn_no = dialog_buy.findViewById(R.id.no);
//确定按钮
btn_yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取数据集合
List<Map<String,Object>> list = dao.PfindAll();
//获取当前价格信息
HashMap<String,Object> map = (HashMap<String, Object>) list.get(position);
int price = (int) map.get(Constants.PROP_PRI);
//获取总积分信息
int num = Integer.parseInt((String)pp.getText());
//判断是否有足够的积分
if(price>num){
//积分不够,提示信息
Toast.makeText(getActivity(),"您的积分不足",Toast.LENGTH_SHORT).show();
}
else {
//满足购买条件
//扣除积分
num -= price;
//分数设置
pp.setText(String.valueOf(num));
sp.setText(String.valueOf(num));
int cc = listView.getChildCount(); //获取可见的模块个数
int pnum = Integer.parseInt((String) map.get(Constants.PROP_NUM));//目前拥有当前道具的数量
pnum++; //数量+1
if (position < cc - 1) {
//可见时,修改页面编号,不在可见度内,数据会自动刷新
LinearLayout ll = (LinearLayout) listView.getChildAt(position);
TextView tv = ll.findViewById(R.id.ppnum);
tv.setText(pnum + "");
}
//获取列表中的数据集合
MyAdapter adapter = (MyAdapter) listView.getAdapter();
List<Map<String, Object>> la = adapter.getList();
//写入list集合
la.get(position).put(Constants.PROP_NUM, pnum);
//写回数据库
ContentValues values = new ContentValues();
values.put(Constants.PRI_POI, num);
dao.Update(Constants.PRI_TNAME, values);
values.clear();
values.put(Constants.PROP_NUM, pnum);
dao.Update(Constants.PROP_TNAME, values, Constants.PROP_ID + "=?", new String[]{(position + 1) + ""});
//在对话框关闭时,移除它的父视图
((ViewGroup)dialog_buy.getParent()).removeView(dialog_buy);
//窗口关闭
ad.dismiss();
}
}
});
//取消按钮
btn_no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//在对话框关闭时,移除它的父视图
((ViewGroup)dialog_buy.getParent()).removeView(dialog_buy);
ad.dismiss();
}
});
}
重点:在每次关闭对话框时,移除父视图。
((ViewGroup)dialog_buy.getParent()).removeView(dialog_buy);
其中dialog_buy是自定义对话框的xml视图。