Listview не отображается во фрагменте - PullRequest
0 голосов
/ 23 июня 2019

Listview не отображается фрагментом в tablayout, и я получаю данные из базы данных Firebase в реальном времени.

Я пытался использовать listfragment, но он не работал.

public class AdminManagerListFragment extends Fragment {

    private ListView managersList;
    private ArrayList<String> managers;
    private ArrayAdapter<String> adapter;

    public AdminManagerListFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_admin_manager_list, container, false);
        managers = new ArrayList<String>();
        listOfManagers();
        adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, managers);
        managersList = (ListView) view.findViewById(R.id.listView);
        managersList.setAdapter(adapter);

        return view;
    }


    private void listOfManagers() {
        FirebaseDatabase.getInstance().getReference().child("users").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                String value = (String) dataSnapshot.child("userType").getValue();
                if (value.equals("manager")) {
                    String username = (String) dataSnapshot.child("username").getValue();
                    managers.add(username);
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

Я хочуотобразить список в фрагменте, который содержит данные, загруженные из базы данных.

1 Ответ

1 голос
/ 23 июня 2019

Это не ответ на проблему, с которой вы столкнулись, но это полезное изменение в коде, который слишком длинный, чтобы поместиться в комментарии.

Ваш текущий код загружает все данные из базы данных, а затем локально фильтрует правильные данные. Более эффективно разрешить базе данных выполнять эту фильтрацию с помощью запроса. Эквивалентная фильтрация:

FirebaseDatabase.getInstance().getReference().child("users")
  .orderByChild("userType").equalToValue("manager")
  .addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
        String username = (String) dataSnapshot.child("username").getValue();
        managers.add(username);
        adapter.notifyDataSetChanged();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...