请看下面的代码:
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
时这是不一样的
答案 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());
}
}