防止AutoCompleteTextView显示重复项

时间:2016-08-03 14:48:46

标签: android android-arrayadapter hashset autocompletetextview

请看下面的代码:

DatabaseReference database = FirebaseDatabase.getInstance().getReference();
final ArrayAdapter<String> autoComplete = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
final HashSet<String> hashSet = new HashSet<>();
      //*I cut out the part where I get the data from the database and store it into "hashSet"
autoComplete.addAll(hashSet);
actv.setAdapter(autoComplete);

我尝试过这种方法来防止我的ACTV中出现重复的项目(AutoCompleteTextView)。但是,建议不再出现。当没有首先添加检索到的数据并将其存储在hashSet中,然后将其添加到autoComplete时, 工作直接将其添加到autoComplete

我该如何解决这个问题?

编辑:我已经注意到了一些方法,我正在查看我的数据...

 hashSet = new HashSet<>();
        database.child("AutoCompleteOptions").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot suggestionSnapshot : dataSnapshot.getChildren()) {
                    String suggestion = suggestionSnapshot.child("suggestion").getValue(String.class);
                        //Log.d("FBSA",suggestion);
                        hashSet.add(suggestion);
                        for(String s:hashSet)
                            Log.d("FBSA",s);
                }
            }

...我的HashSet充满了物品。但是,当程序EXITS那个方法时,似乎我的HashSet完全清除了。我的意思是,在onDataChange()方法中,当我添加:

for(String s:hashSet)
   Log.d(TAG,s)

我按照预期正常收到物品清单。 但是,当我执行for循环OUTSIDE onDataChange()时,HashSet为空,表示已清除。 然而,使用ArrayAdapter 这是不一样的

2 个答案:

答案 0 :(得分:0)

经过数小时的研究和思考,我做到了。

在您获得数据之后,在向ArrayAdapter添加任何内容之前,删除所有与您刚刚获得的字符串相同的字符串,然后添加它。这几乎说:

  

&#34;你给了我一个KitKat吧?好的,让我看看我是否有任何KitKat棒,   如果我这样做,我会把它们扔掉,除了你给我的那个,   这样,我只有一个。

以下是示例代码:

for(String s:myData){
  //This removes all strings that are equal to s in the adapter
  for(int i=0;i < adapter.getCount();i++){
     if(adapter.getItem(i).equals(s)
          adapter.remove(s)
   }
//Now that there are no more s in the ArrayAdapter, we add a single s, so now we only have one
adapter.add(s);
}

上面的代码显示:找到s中的所有ArrayAdapter并删除它们,然后添加一个s。这样,我只有1 s。 (与上面的KitKat示例相关)。

答案 1 :(得分:0)

遇到了同样的问题。我想我找到了更好的方法。我知道这是旧的,只是分享给下一个人。

for (String s: myData) { 
     if (!adapter.contains(s.getName().toLowerCase)) {
         adapter.add(s.getName());
         }
    }