Android SearchView Фильтр ListView из базы данных Firebase в реальном времени - PullRequest
0 голосов
/ 06 июня 2018

Я новичок в этом и прошел много уроков.Коды скопированы в основном из источников.У меня есть данные ListView из базы данных Firebase Realtime, и я попытался использовать SearchView для фильтрации данных.Однако, когда я пытался что-то напечатать, мои данные ListView не смогли ничего показать.Я могу просмотреть все данные снова, когда SearchView пуст.Там не отображаются ошибки.Я что-то упустил?

MainActivity.java

SearchView searchEmail;
ListView listViewUsers;

//a list to store all the user from firebase database
ArrayList<User> users;

//our database reference object
DatabaseReference databaseUsers;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_manage_shoppers);

    //getting the reference of artists node
    databaseUsers = FirebaseDatabase.getInstance().getReference("Users");

    //getting views
    searchEmail = (SearchView) findViewById(R.id.searchEmail);
    listViewUsers = (ListView) findViewById(R.id.listViewUsers);

    //list to store users
    users = new ArrayList<>();

    //creating adapter
    final UserList adapter = new UserList(ManageShoppers.this, users);

    //attaching adapter to the listview
    //listViewUsers.setAdapter(userAdapter);

    //final ArrayAdapter adapter = new ArrayAdapter<String>(ManageShoppers.this, R.layout.layout_user_list, users);
    listViewUsers.setAdapter(adapter);

    databaseUsers.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            //clearing the previous user list
            users.clear();

            //iterating through all the nodes
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {

                //getting artist
                User user = postSnapshot.getValue(User.class);
                //adding artist to the list
                users.add(user);
            }
            adapter.notifyDataSetChanged();

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    searchEmail.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            adapter.getFilter().filter(s);
            return true;
        }
    });

UserList.java

public class UserList extends ArrayAdapter<User> {
    private Activity context;
    List<User> users;

public UserList(Activity context, List<User> users) {
    super(context, R.layout.layout_user_list, users);
    this.context = context;
    this.users = users;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View listViewItem = inflater.inflate(R.layout.layout_user_list, null, true);

    TextView textEmail = (TextView) listViewItem.findViewById(R.id.textEmail);


    User user = users.get(position);
    textEmail.setText(user.getUserEmail());


    return listViewItem;
}
}

User.java

public class User {

public String email;
public String password;

public User() {

}

public User(String email, String password) {

    this.email = email;
    this.password = password;
}

public String getUserEmail() {
    return email;
}

public String getUserPassword() {
    return password;
}


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...