Как проверить, что адаптер, который я использую с Recyclerview, пуст? - PullRequest
0 голосов
/ 29 мая 2019

Я выполняю некоторые запросы к базе данных Firebase с помощью Firebase Adapter и Recyclerview. Если у меня есть результаты в базе данных с текстом редактирования, я просматриваю их с помощью утилита просмотра. Это моя проблема. Я хочу отобразить тост на экране, если запрос, который я вызываю с помощью Edittext, не включен в базу данных. Я написал несколько кодов, но я не могу запустить его полностью. Ответы на другие вопросы в Stackoverflow у меня не сработали, и я не смог понять проблему. Пожалуйста, просмотрите мой код ниже. Я был бы признателен, если бы вы могли помочь. Извините за мой плохой английский.

MainActivity

public class MainActivity extends AppCompatActivity {

DatabaseReference mUserDatabase;

    EditText Search_Edit_Text;
    ImageButton Search_Button;
    RecyclerView Search_Contact_List;


    FirebaseRecyclerOptions<User> options;
    FirebaseRecyclerAdapter<User,CategoryViewHolder> adapter;

    Query firebaseSearchQuery;

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

        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Database");

 Search_Edit_Text = (EditText) findViewById(R.id.Search_Edit_Text);
        Search_Button = (ImageButton) findViewById(R.id.Search_Button);


Search_Contact_List = (RecyclerView) findViewById(R.id.Search_Contact_List);
        Search_Contact_List.setHasFixedSize(true);
        GridLayoutManager gridLayoutManager = new GridLayoutManager(getBaseContext(),1);
        Search_Contact_List.setLayoutManager(gridLayoutManager);

Search_Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String searchText = Search_Edit_Text.getText().toString().trim();

                    firebaseUserSearch(searchText);

            }
        });

    }

private void firebaseUserSearch(String searchText) {

        firebaseSearchQuery = mUserDatabase.orderByChild("phone").startAt("" + searchText).endAt("" + searchText + "\uf8ff");

        options = new FirebaseRecyclerOptions.Builder<User>()
                .setQuery(firebaseSearchQuery,User.class)
                .build();

        adapter = new FirebaseRecyclerAdapter<User, CategoryViewHolder>(options) {

            @Override
            protected void onBindViewHolder(@NonNull final CategoryViewHolder holder, int position, @NonNull final User model) {

                holder.categoryname.setText(model.getName());
            }

            @NonNull
            @Override
            public CategoryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

                View itemView = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.list_layout,parent,false);
                return new CategoryViewHolder(itemView);
            }
        };

        setCategory();
    }

    private void setCategory() {

        adapter.startListening();
        Search_Contact_List.setAdapter(adapter);


        adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {

            @Override
            public void onChanged() {
                super.onChanged();
                checkEmpty();
            }

            @Override
            public void onItemRangeInserted(int positionStart, int itemCount) {
                super.onItemRangeInserted(positionStart, itemCount);
                checkEmpty();
            }

            @Override
            public void onItemRangeRemoved(int positionStart, int itemCount) {
                super.onItemRangeRemoved(positionStart, itemCount);
                checkEmpty();
            }

            void checkEmpty() {

                if (adapter.getItemCount() == 0){

                    Toast.makeText(MainActivity.this, "No Result", Toast.LENGTH_SHORT).show(); //This code does not work.
                } else {

                    Toast.makeText(MainActivity.this, "OKEY", Toast.LENGTH_SHORT).show(); //This code works.

                }
            }
        });

    }
}

Я написал, что часть кода выше работает. Но код не работает, когда я не получаю никаких результатов. В некоторых ответах Stackoverflow говорится, что мне нужно получить значение с помощью adapter.getCount () или adapter.getItemCount (), но я пробовал это сделать, но это не сработало.

CategoryViewHolder.class

 public class CategoryViewHolder extends RecyclerView.ViewHolder {

        public TextView categoryname;

        public CategoryViewHolder(View itemView) {
            super(itemView);

            categoryname = (TextView)itemView.findViewById(R.id.Search_Result_Name);
        }

    }

User.class

public class User {

    public String name;
    public String phone;

    public User() {

    }

    public User(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...