2016-10-22 141 views
0

我使用此代碼段填充listview,但需要檢查從textviw中取得的值是否已經存在於listview中,有沒有人知道這個問題的一個好的做法?避免重複列表視圖

tv.setText(count+" | "+"id: "+uid+" Sak: "+Sak+" atqa: "+atqa); 
    count++; 
    int k=sp.getCount(); 
    String a1[]=new String[k+1]; 
    for(int i=0;i<k;i++) 
     a1[i]=sp.getItemAtPosition(i).toString(); 
    a1[k]=tv.getText().toString(); 
    ArrayAdapter<String> ats=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,a1); 



    sp.setAdapter(ats); 

回答

0

你並不需要使用適配器視圖#getItemAtPosition(INT),以獲得與行項目相關聯的數據,作爲ArrayAdapter本身可以讓你#getItem(int)和#getCount()。

所以得到完整的數組支持listview。這樣做:

String newItem = "Item to insert"; 
for(int i=0; i<adapter.getCount(); i++){ 
    String foo = (Object) adapter.getItem(i); 
    if (foo.equals(newItem)){ 
    return; // do not add 
    } 
} 
adapter.add(newItem); // add it 
+0

沒有工作對我來說,因爲我忘了,更不用說我正在一個newintent處理器內,所以每次拍攝的NFC標籤獲得了陣列中添加其ID,因此最終工作代碼給我 – joghm

0
int k=sp.getCount(); 
    String a1[]=new String[k+1]; 

     for (int i = 0; i < k; i++) { 
      a1[i] = sp.getItemAtPosition(i).toString(); 
      Log.e("test", "test" + a1[i].toString()); 
      Log.e("test", "orig" + " | " + "id: " + uid + " Sak: " + Sak + " atqa: " + atqa); 

      String foo = (" | " + "id: " + uid + " Sak: " + Sak + " atqa: " + atqa); 
      if (foo.equals(a1[i].toString())) { 
       Log.e("eqal", "equal"); 
       return; 


      } 
     } 

    a1[k]=tv.getText().toString(); 
    ArrayAdapter<String> ats=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,a1); 
    Log.e("test","test"+ats.getItem(k)); 


    sp.setAdapter(ats);