java - ListView 不显示在 fragment 中

标签 java android firebase listview firebase-realtime-database

Listview 未在 tablayout 中以 fragment 形式显示,我正在从 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) {

            }
        });
    }
}

我想在 fragment 中显示 ListView ,其中包含从 firebase 下载的数据。

最佳答案

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

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

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

关于java - ListView 不显示在 fragment 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56723398/

相关文章:

java - 将字体添加到 Intent 以发送到另一个 Activity

firebase - 无法通过点击通知导航到特定页面。 Flutter 深度链接问题

firebase - 配置根项目 'firebase_auth' 时出现问题

web - 如何检索 Firebase 生成的对象 ID?

java - 如何将通用子类型列表转换为特定子类型列表?

java - 如何修复从设置 Activity 到主要 Activity 的移动?

java - 能解释一下 "Loggers are stored in a namespace hierarchy "是什么意思吗?

java - 如何将音频文件转换为字节数组

android - 触摸事件 : when finger is removed from the item

android - 在android中接收和串联超过160个字符的短信