在我的应用程序中,我有Adapter
扩展BaseAdapter
。在那个班级里面有方法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.childitem, parent, false);
}
Product p = getProduct(position);
((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);
CheckBox cbBuy = (CheckBox) view.findViewById(R.id.cbBox);
cbBuy.setOnCheckedChangeListener(myCheckChangList);
cbBuy.setTag(position);
cbBuy.setChecked(p.box);
return view;
}
在我的应用的MainActivity
中,我尝试将自定义AlertDialog
与两个EditText
用于输入。它没有正常工作,并建议使用View
来访问我的资源。
void newItemInput(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
final View v = inflater.inflate(R.layout.dialog_signin, null);
builder.setView(v);
builder.setTitle("");
builder.setMessage("");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
EditText item_name = (EditText) v.findViewById(R.id.item_name);
EditText item_price =(EditText) v.findViewById(R.id.item_price);
String text = item_name.getText().toString();
String text_price = item_price.getText().toString();
int price = Integer.parseInt(text_price);
// Do something with value!
products.add(new Product(text, price, R.drawable.unread, false));
item_name.setText("");
item_price.setText("");
}
});
现在,当我在Dialog
中插入数据以将其用作以下语句中的参数时:
products.add(新产品(文字,价格,R.drawable.unread,false));
......它表现得很奇怪。这是因为View
调用适配器和对话框之间的矛盾吗?如果是这样,可以做些什么来解决它?
答案 0 :(得分:0)
当您对适配器维护的数据进行任何更改时,您需要调用适配器的notifyDataSetChanged方法。这将通知附加的视图,数据已更改,并且应自行刷新。您注意到的奇怪行为是因为在将新项目添加到列表的过程中调用此行为,而不是在添加项目之后调用。
有关使用适配器的更多信息,请访问:http://developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViews