2017-10-07 1 views
0

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) { 
     } 
    }); 
} 

答えて

0

private String car_Value; 
private String interest; 
private String driverLicenseNr; 
private String name; 
private String personNr; 
private String phone_Number; 

public Buyers(Map<String,String> map){ 
    car_Value = map.get("Bil"); 
    interest = map.get("Interesse"); 
    driverLicenseNr = map.get("Kørekortnr"); 
    name = map.get("Navn"); 
    personNr = map.get("Personnr"); 
    phone_Number = map.get("Telefonnr"); 
} 
String getData() 
{ 
    return (name + " " + phone_Number); 
} 

クラスを検索します。

リストビューの外にすべてのデータを格納し、フィルタリングされたデータをListViewに追加する方が簡単です。 (その後、ArrayAdapterをカスタマイズする必要はありません)

+0

私は同意します。私の問題は私が新しいことです。アーリーリストにすべてのデータを追加し、それらのデータをフィルターに掛けて別のアーリーリストに転送して表示する方法はありません。 – Michael

+1

まあ、ListListとは関係なく、すべてのバイヤーを含む 'ArrayList all_buyers'をどこかに持つことができます。リストを反復し、すべてのオブジェクトのすべてのフィールドをチェックし、一致するすべてのオブジェクトを新しいリスト(返されるリスト)に追加しますが、追加するだけで、 'ArrayList filter_buyers(ArrayList all_buyers、String query)'関数を書くことができます'buyer.getData()'の結果を返します(単純なString)。この単純な文字列の配列を返します。 (私は今ほとんどそれを書いた:))。 onQueryTextSubmit()はこの関数を呼び出し、ListViewを結果で更新します... – gregn3

関連する問題