2016-10-22 99 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);