2017-10-07 53 views
0

我正在使用firebase數據庫來包含我希望能夠搜索的數據。我可以將Firebase中的數據插入到對象中。我希望能夠搜索所有對象中的所有元素,但只希望在ListView中顯示兩個值。我有以下代碼從Firebase中檢索數據,將其插入到對象中並返回兩個值,我可以通過它們進行搜索。搜索自定義對象中的所有值,但僅顯示ListView中的一些值Android

我的問題是,我可以很容易地通過簡單地返回「getData()」中的所有元素來搜索,但我只想要在ListView中顯示的名稱和電話號碼。 任何人有一個想法如何做到這一點?

對象類:

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

搜索類:

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

你會需要定製ArrayAdapter使用特殊的過濾器對象。

將所有數據存儲在ListView之外並且只將過濾的數據添加到ListView會更容易。 (然後沒有必要自定義ArrayAdapter)

+0

我同意。我的問題是我是新手,並且我看不到將所有數據添加到數組列表的方法,然後過濾這些數據並將其傳輸到另一個數組列表,然後可以顯示這些數據列表。 – Michael

+1

那麼,你可以在一個獨立於ListView的地方擁有一個'ArrayList all_buyers',它包含所有的買家。你可以寫一個'ArrayList filter_buyers(ArrayList all_buyers,String query)'函數,遍歷列表,檢查所有對象中的所有字段,將所有匹配對象添加到新列表(它返回的那個列表),但只添加'buyer.getData()'的結果(簡單的字符串)。它返回這個簡單字符串的數組。 (我現在幾乎寫了:))。 onQueryTextSubmit()會調用這個函數,並用結果更新ListView ... – gregn3

相關問題