我想以自己的成本添加产品列表,但是当我添加第二个产品时,第二个产品的值会覆盖第一个产品的值。 我该怎么办?
Spesa.java
public class Spesa extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.spesa_layout);
final Button add_btn = (Button)findViewById(R.id.btn_add);
final ArrayList<HashMap<String, String>> data=new ArrayList<HashMap<String,String>>();
final HashMap<String,String> personMap=new HashMap<String, String>();
final EditText et_main = (EditText)findViewById(R.id.et_main);
final EditText costo= (EditText)findViewById(R.id.costo);
add_btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String str = et_main.getText().toString();
String str2 = costo.getText().toString();
personMap.put("name", str);
personMap.put("code", str2);
data.add(personMap);
String[] from = {"name", "code"};
int[] to = {R.id.textView1, R.id.textView3};
SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(), data,R.layout.row,from,to);
//Setting Adapter to ListView
((ListView)findViewById(R.id.list)).setAdapter(adapter);
}});}}
如何通过点击删除产品?
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
AlertDialog.Builder adb = new AlertDialog.Builder(Spesa.this);
adb.setTitle("Delete?");
adb.setMessage("Are you sure you want to delete " + position);
final int positionToRemove = position;
adb.setNegativeButton("Cancel", null);
adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
data.remove(positionToRemove);
adapter.notifyDataSetChanged();// i don't know how to do this
}
});
adb.show();
}
});
答案 0 :(得分:0)
您的个人地图在onclick事件之外被声明为final,但在那里没有任何用法。将声明放在onclick事件(而不是最终)中,每次将其添加到数据对象时,您将创建一个新实例。目前您正在更改之前的相同实例。
答案 1 :(得分:0)
很明显,因为你每次都使用相同的HashMap实例,而后者会使用相同的密钥覆盖前一个值。因此,如果您不想重写,则必须在click事件中创建另一个HashMap实例,
add_btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
personMap=new HashMap<String, String>();
String str = et_main.getText().toString();
String str2 = costo.getText().toString();
personMap.put("name", str);
personMap.put("code", str2);
data.add(personMap);
....
此外,您必须删除HashMap的final
声明,以便在onClick()
事件
答案 2 :(得分:0)
我认为问题在于HashMap。 当我们在HashMap中使用相同的键传递值时,它会覆盖以前的值。
personMap=new HashMap<String, String>();
String str = et_main.getText().toString();
String str2 = costo.getText().toString();
personMap.put("name", str);
personMap.put("code", str2);
data.add(personMap);