firebaseデータベースを使用して、検索可能なデータを格納しています。 Firebaseのデータをオブジェクトに挿入することができます。すべてのオブジェクトのすべての要素を検索できますが、ListViewに表示される値は2つだけです。 Firebaseからデータを取得し、それをオブジェクトに挿入し、2つの値を返す次のコードがあります。これを検索することができます。カスタムオブジェクトのすべての値を検索しますが、リストビューのAndroidにはいくつかの値しか表示されません
私の問題は、単に "getData()"内のすべてを返すだけで簡単にすべての要素を検索できるということですが、ListViewに表示される名前と電話番号のみが必要です。 これを行う方法を知っている人は誰ですか?
Objectクラス:あなたは特別なFilterオブジェクトを使用するArrayAdapterをカスタマイズする必要があります
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);
searchModule = (SearchView) findViewById(R.id.SearchTab);
mDatabaseReference = FirebaseDatabase.getInstance().getReference("Buyers");
mUserList = (ListView) findViewById(R.id.UserListView);
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();
Buyers buyerList = new Buyers(map);
mUsernames.add(buyerList.getData());
//filteredUsernames.add(buyerList.getData());
arrayAdapter.notifyDataSetChanged();
}
searchModule.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
arrayAdapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String query) {
arrayAdapter.getFilter().filter(query);
arrayAdapter.notifyDataSetChanged();
return true;
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
私は同意します。私の問題は私が新しいことです。アーリーリストにすべてのデータを追加し、それらのデータをフィルターに掛けて別のアーリーリストに転送して表示する方法はありません。 – Michael
まあ、ListListとは関係なく、すべてのバイヤーを含む 'ArrayList all_buyers'をどこかに持つことができます。リストを反復し、すべてのオブジェクトのすべてのフィールドをチェックし、一致するすべてのオブジェクトを新しいリスト(返されるリスト)に追加しますが、追加するだけで、 'ArrayList filter_buyers(ArrayList all_buyers、String query)'関数を書くことができます'buyer.getData()'の結果を返します(単純なString)。この単純な文字列の配列を返します。 (私は今ほとんどそれを書いた:))。 onQueryTextSubmit()はこの関数を呼び出し、ListViewを結果で更新します... –
gregn3