Deepank Mehta
Deepank Mehta

Reputation: 37

Listview not displaying in fragment

Listview is not displaying in fragment in tablayout and i am getting data from firebase realtime database.

I have tried using listfragment but it did not work.

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) {

            }
        });
    }
}

I want to display listview in fragment which contains data downloaded from firebase.

Upvotes: 0

Views: 96

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 598847

This is not an answer to the problem you're having, but it's a useful change to the code that is too long to fit in a comment.

Your current code is loading all data from the database, and then locally filters for the correct data. It's more efficient to let the database do that filtering by using a query. The equivalent filtering is:

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

Upvotes: 2

Related Questions