我创建了一个包含四个文本视图的自定义列表...此列表中的数据通过一个带有ok按钮的对话框保存。当我添加数据时,它会保存在列表中(到目前为止工作正常)。当我添加下一个元素时,所有行都获得与最后一个相同的值... notifyDatasetChanged()也无法正常工作......我错了吗?...这是我的代码......
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String val = editquantity.getText().toString();
valq1 = Integer.parseInt(val);
ListView l;
l = (ListView) v.findViewById(R.id.order_listview);
myAdapter adapter = new myAdapter(getActivity(), row);
l.setAdapter(adapter);
row.add("");
adapter.notifyDataSetChanged();
builder.dismiss();
}
});
builder.setView(dialog);
builder.show();
答案 0 :(得分:2)
每次单击“确定”时都创建了新适配器。将适配器代码放在onclick方法之外:
ListView l = (ListView) v.findViewById(R.id.order_listview);
myAdapter adapter = new myAdapter(getActivity(), row);
l.setAdapter(adapter);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String val = editquantity.getText().toString();
valq1 = Integer.parseInt(val);
row.add(""); //add new item to the list
adapter.notifyDataSetChanged(); //notify adapter
builder.dismiss();
}
});
builder.setView(dialog);
builder.show();
答案 1 :(得分:1)
您需要使用addAll()方法添加新值,其余旧值在arraylist中相同。
row.addAll("test");
答案 2 :(得分:0)
为什么要将行添加为空白。 其次,您已在适配器中设置行而不定义它。 请提供更多详细信息,因为我无法理解行已声明的位置。 来到类似的价值问题。 您需要更新行数组,因为它已在适配器上设置。
答案 3 :(得分:0)
您需要改变三件事
1.在onCreate()之外声明ListView对象
2.在onCreate()之外声明你的适配器对象
现在这个下面这行的初始化只需要在onCreate()中初始化一次。当你添加新项目时,你不需要一次又一次地初始化它。所以在你的onCreate()下面写行。
myAdapter adapter = new myAdapter(getActivity(), row);
当您添加新项目时,您只需要在名为row on the okoch按钮的arraylist中添加该项目,然后调用adapter.notifyDataSetChanged();
它将正常工作。