0
목록보기에 데이터를 표시 할 수있는 Firebase 데이터베이스가 있습니다. 모든 데이터는 오브젝트에 포함되어 데이터를 가져옵니다. 예를 들어 "Lars"를 검색 창에 쓸 수있게하려면 목록에있는 모든 내용을 검색 창에서 삭제하면 해당 문자열을 포함하는 객체 만 포함하도록 목록 뷰를 업데이트해야합니다. 첫 번째 for 루프가 작동하고 두 번째 for 루프가 데이터 검색을 시도합니다. 내 중포 기지의 구조는 다음과 같습니다 Android에서 Listview를 사용하여 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