搜索自定义对象中的所有值,但仅显示 ListView 中的少数值 Android
Search through all values in custom object but only show a few of the values in a ListView Android
我正在使用 firebase 数据库来包含我希望能够搜索的数据。我可以将我的数据从 Firebase 插入到一个对象中。我希望能够搜索所有对象中的所有元素,但只希望在 ListView 中显示两个值。我有以下代码从 Firebase 检索数据,将其插入一个对象和 returns 两个值,我可以搜索这些值。
我的问题如前所述,我可以通过简单地返回 "getData()" 中的所有元素来轻松地搜索所有元素,但我只想要 ListView 中显示的名称和 Phone 数字。
谁知道如何做到这一点?
对象class:
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);
}
正在搜索 class:
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) {
}
});
}
您需要自定义 ArrayAdapter 才能使用特殊的 Filter 对象。
将所有数据存储在ListView之外,只将过滤后的数据添加到ListView中会更容易。 (那就不用自定义ArrayAdapter了)
我正在使用 firebase 数据库来包含我希望能够搜索的数据。我可以将我的数据从 Firebase 插入到一个对象中。我希望能够搜索所有对象中的所有元素,但只希望在 ListView 中显示两个值。我有以下代码从 Firebase 检索数据,将其插入一个对象和 returns 两个值,我可以搜索这些值。
我的问题如前所述,我可以通过简单地返回 "getData()" 中的所有元素来轻松地搜索所有元素,但我只想要 ListView 中显示的名称和 Phone 数字。 谁知道如何做到这一点?
对象class:
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);
}
正在搜索 class:
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) {
}
});
}
您需要自定义 ArrayAdapter 才能使用特殊的 Filter 对象。
将所有数据存储在ListView之外,只将过滤后的数据添加到ListView中会更容易。 (那就不用自定义ArrayAdapter了)