0
リストビューにデータを表示できるFirebaseデータベースがあります。すべてのデータはオブジェクトに格納され、オブジェクトにデータが格納されます。私は "Lars"の例を検索バーに書くことができるようにしたいのですが、リストビューを更新してその文字列を含むオブジェクトのみを含むようにしなければなりません。最初のforループは動作し、2番目のforループはデータを検索しようとしています。 Androidでリストビューを使用してFirebaseからデータを検索する
private DatabaseReference mDatabaseReference;
private ListView mUserList;
private SearchView searchModule;
private ArrayList<String> mUsernames = new ArrayList<>();
private ArrayList<String> filteredUsernames = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_existing_customer);
mDatabaseReference = FirebaseDatabase.getInstance().getReference("Buyers");
mUserList = (ListView) findViewById(R.id.UserListView);
searchModule = (SearchView) findViewById(R.id.SearchTab);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mUsernames);
final ArrayAdapter<String> filteredArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, filteredUsernames);
mUserList.setAdapter(arrayAdapter);
mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
Map<String, String> map = (Map<String, String>) childSnapshot.getValue();
Log.v("YourValue,","Map value is:" +map.toString());
Log.d("TAG", "onChildAdded:" + dataSnapshot.getKey());
Buyers buyerList = new Buyers(map);
mUsernames.add(buyerList.getData());
}
CharSequence searchValue = (CharSequence) searchModule;
arrayAdapter.getFilter().filter(searchValue);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
私はあなたのコードを試しましたが、これは意図したとおりにListViewを提供しますが、何も検索できません。何か案は? – Michael
検索部分を紛失しました。編集部分が追加されました。基本的には、リスナーを使用して変更をリッスンし、フィルターを更新できるはずです。私はコードを試していない、それでも動作する必要があります。また、実際にアダプタにフィルタを適用し、データセットを変更しないので、notifyDataSetChangeは実際には必要ではありません。 – merterpam