2014-01-17 25 views
0

我是初學者的android開發人員,這是我的第一個項目。我在EntryTO.java上有一個listview來顯示ViewData.java上選定列表視圖的數據順序。我使用按鈕來顯示ViewData,Java。這是代碼,當我從ViewData.javalistview - 我新插入的數據替換了以前的數據

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不爲空時,獲取最新數據順序的索引並在其後插入新數據。問題是,第二個數據仍然取代了第一個數據。我如何解決它們?

+0

你可以檢查新插入的數據的編號 –

+0

我該如何檢查編號 – WardaLyn

+0

你正在檢查總是爲真的if(map1.isEmpty()) –

回答

0

我發現@ ling.s的回答是對的。但它需要一些最後的感動。我嘗試製作Globals.java。這是代碼

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

}

上EntryTO.java我們只需要調用MYLIST從Globals.java

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){} 

工作。

0

選擇您所選擇的做法意味着你需要在你的類來存儲內容你傳遞給ArrayAdapter實施爲第三參數(即初始元素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); 

如果你想添加一個項目,只是做:

my_items.add("three"); 
adapter.dataSetChanged(); 

希望這有助於。

+0

它無法解決問題。 my_item的數量可能取決於我從另一個活動的另一個listview中選擇訂單的數量 – WardaLyn

+0

我沒有得到什麼問題。但是如果你選擇這種方法,那就是繼承的方式。 – nKn

+0

有時候我們要選擇10個訂單,也許不到3個,我們不能在我們選擇訂單之前更改代碼。那就是問題。 – WardaLyn

0

您正在檢查if(map1.isEmpty()),這始終爲真。 使用

if(mylist.size() == 0) 

而不是

if(map1.isEmpty()) 

,並找出下一個元素會被插入,得到它增加了一個項目的最後一個位置的大小。

int j=mylist.size(); 
+0

它仍然取代,我的邏輯有什麼問題嗎? – WardaLyn

相關問題