通过键盘将数据插入listview并查看数据

时间:2015-06-16 11:52:59

标签: android

我想以自己的成本添加产品列表,但是当我添加第二个产品时,第二个产品的值会覆盖第一个产品的值。 我该怎么办?

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();
        }
    });

3 个答案:

答案 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);