listview - 我的新插入数据正在替换早期数据

时间:2014-01-17 07:33:08

标签: android listview arraylist

我是初学Android开发者,这是我的第一个项目。我在EntryTO.java上有一个列表视图,用于显示ViewData.java上选定列表视图的数据顺序。我用按钮来显示ViewData,java。这是我从ViewData.java

中选择所选项目时的代码
ListView lv = (ListView) findViewById(android.R.id.list);
          lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
          @Override
          public void onItemClick(final AdapterView<?> adapter, View v, int pos, final long id) {
          final Dialog dialog = new Dialog(ViewData.this);
          dialog.setContentView(R.layout.dialog_view);
          dialog.setTitle("Masukkan Qty");
          dialog.show();
          final product b = (product) getListAdapter().getItem(pos);
          edtqty = (EditText) dialog.findViewById(R.id.edtqty);
          buttonok = (Button) dialog.findViewById(R.id.buttonok);
          buttonok.setOnClickListener(new OnClickListener(){
              @Override
              public void onClick(View v) {
              switchToEdit(b.getId());
              dialog.dismiss();
                   };
             });
          }
      });
  }
  public void switchToEdit(long id){
      product b = dataSource.getproduct(id);
      Intent i = new Intent(this, EntryTO.class);
      Bundle bun = new Bundle();

      bun.putLong("id", b.getId());
      bun.putString("brand", b.getbrand());
      bun.putString("qty",edtqty.getText().toString());
      i.putExtras(bun);
      finale();
      startActivity(i);
  }

这是我尝试在EntryTO.java上显示时的代码

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.entry_to);
      dataSource = new DBDataSource(this);
      dataSource.open();
      mylist = new ArrayList<HashMap<String, String>>();
      Bundle bun = null;
      try{
          bun = EntryTO.this.getIntent().getExtras();
          id = bun.getLong("id");
          brand = bun.getString("brand");
          qty = bun.getString("qty");
          map1 = new HashMap<String, String>();
          if(map1.isEmpty()){
             map1.put("one", brand);
             map1.put("two", qty); 
             mylist.add(map1); 
          }else{
              int j=mylist.lastIndexOf(map1);
              map1.put("one", brand);
              map1.put("two", qty); 
              mylist.add(j,map1); 
          }
          try {
              adapter = new SimpleAdapter(EntryTO.this, mylist, R.layout.item_to,
                        new String[] {"one", "two" },
                        new int[] {R.id.edtbrandto, R.id.edtqtyto });
              setListAdapter(adapter);
          }catch (Exception e) {Toast.makeText(EntryTO.this, "Ada Error Exception", Toast.LENGTH_LONG).show();}
      }catch(NullPointerException e){}}

我之前尝试使用循环。当我插入第一个订单时,没有问题。但是当我尝试插入第二个订单时,第二个订单替换了第一个订单。它导致当我点击显示ViewData.java的按钮时,arraylist的索引再次变为0。现在我尝试使用if函数检查arraylist(mylist)的索引。如果mylist.isEmpty插入数据顺序,但是当mylist不为空时获取最新数据顺序的索引并在此之后插入新数据。问题是,第二个数据仍然取代了第一个数据。我该如何修理它们?

3 个答案:

答案 0 :(得分:0)

选择您选择的方法意味着您需要在课程中将您传递给ArrayAdapter实现的内容存储为第三个参数(即{{1}初始元素)。

这样,如果您需要添加新元素,则只需将其添加到ArrayList并调用ArrayList方法。

例如:

notifyDataSetChanged()

如果您想添加项目,请执行以下操作:

ArrayList<String> my_items = new ArrayList<String>();
my_items.add("one");
my_items.add("two");

adapter = new SimpleAdapter(EntryTO.this, mylist, R.layout.item_to, my_items);

希望这有帮助。

答案 1 :(得分:0)

您正在检查始终为真的if(map1.isEmpty())。 使用

if(mylist.size() == 0)

而不是

if(map1.isEmpty())

并且,为了找出要插入的下一个元素,获取将项目添加到最后位置的大小。

int j=mylist.size();

答案 2 :(得分:0)

我发现@ ling.s的答案是正确的。但它需要一些完成感动。我试着制作Globals.java。这是代码

public class Globals {
public static ArrayList<HashMap<String, String>> mylist;

}

在EntryTO.java上我们只是从Globals.java中调用mylist

if (Globals.mylist == null)
          Globals.mylist = new ArrayList<HashMap<String, String>>();
      Bundle bun = null;
      try{
          bun = EntryTO.this.getIntent().getExtras();
          id = bun.getLong("id");
          brand = bun.getString("brand");
          qty = bun.getString("qty");
          map1 = new HashMap<String, String>();
          if (Globals.mylist.size() == 0) {
              map1.put("one", brand);
              map1.put("two", qty); 
              Globals.mylist.add(map1);
          }else {
              int j=Globals.mylist.size();
              map1.put("one", brand);
              map1.put("two", qty); 
              Globals.mylist.add(j,map1);
          }
          try {
              adapter = new SimpleAdapter(EntryTO.this, Globals.mylist, R.layout.item_to,
                        new String[] {"one", "two" },
                        new int[] {R.id.edtbrandto, R.id.edtqtyto });
              setListAdapter(adapter);
          }catch (Exception e) {Toast.makeText(EntryTO.this, "Ada Error Exception", Toast.LENGTH_LONG).show();}
      }catch(NullPointerException e){}

它的工作。