Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过键盘将数据插入listview并查看数据_Android - Fatal编程技术网

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

Android 通过键盘将数据插入listview并查看数据,android,Android,我想添加一个具有自身成本的产品列表,但当我添加第二个产品时,第二个产品的值将覆盖第一个产品的值。 我能做什么 Spesa.java public class Spesa extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

我想添加一个具有自身成本的产品列表,但当我添加第二个产品时,第二个产品的值将覆盖第一个产品的值。 我能做什么

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

        }});}}
公共类Spesa扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.spesa_布局);
最后一个按钮add_btn=(按钮)findviewbyd(R.id.btn_add);
最终ArrayList数据=新ArrayList();
final HashMap personMap=new HashMap();
最终编辑文本et_main=(编辑文本)findviewbyd(R.id.et_main);
最终EditText costo=(EditText)findViewById(R.id.costo);
添加\u btn.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
字符串str=et_main.getText().toString();
字符串str2=costo.getText().toString();
人名地图放置(“姓名”,str);
人员地图放置(“代码”,str2);
data.add(personMap);
字符串[]from={“name”,“code”};
int[]to={R.id.textView1,R.id.textView3};
SimpleAdapter=新的SimpleAdapter(getApplicationContext(),数据,R.layout.row,from,to);
//将适配器设置为ListView
((ListView)findViewById(R.id.list)).setAdapter(适配器);
}});}}
如何通过单击删除产品

  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();
        }
    });
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
公共视图单击(适配器视图a、视图v、内部位置、长id){
AlertDialog.Builder adb=新建AlertDialog.Builder(Spesa.this);
adb.setTitle(“删除?”);
adb.setMessage(“您确定要删除”+位置);
最终int位置ToRemove=位置;
adb.setNegativeButton(“取消”,空);
adb.setPositiveButton(“确定”,新建AlertDialog.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
数据删除(位置删除);
adapter.notifyDataSetChanged();//我不知道怎么做
}
});
adb.show();
}
});

您的personmap在onclick事件之外被声明为final,但在那里没有任何用途。将声明放在onclick事件(不是final)中,每次都将创建一个新实例,该实例将添加到数据对象中。此时,您正在更改以前的同一个实例。

很明显,这是因为您每次都使用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);
            ....
add_btn.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
personMap=newhashmap();
字符串str=et_main.getText().toString();
字符串str2=costo.getText().toString();
人名地图放置(“姓名”,str);
人员地图放置(“代码”,str2);
data.add(personMap);
....

另外,您必须删除HashMap的
最终声明,以便可以在
onClick()
事件中再次使用它。 当我们在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);
personMap=newhashmap();
字符串str=et_main.getText().toString();
字符串str2=costo.getText().toString();
人名地图放置(“姓名”,str);
人员地图放置(“代码”,str2);
data.add(personMap);

好的,谢谢!如果我想通过单击某个产品来删除它,我该怎么做?是的,但我有一个问题,如果适配器位于onClick的内部,我该如何使用适配器notifyDataSetChanged()?您不能将适配器的实例作为全局实例吗?显然您可以!