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

            }
        });
    }
}


我想在包含从Firebase下载的数据的片段中显示listview。

最佳答案

这不是您遇到的问题的答案,但这是对代码的有用更改,该代码过长而无法放入注释中。

您当前的代码正在从数据库加载所有数据,然后在本地筛选正确的数据。让数据库通过使用查询来进行过滤更加有效。等效过滤为:

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

07-24 17:20