【问题标题】:Listview not displaying in fragmentListview 不显示在片段中
【发布时间】:2019-06-23 11:26:19
【问题描述】:

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 下载的数据的片段中显示列表视图。

【问题讨论】:

  • 你检查条件if (value.equals("manager"))实际上是true吗?因为 ListView 和 Adapter 看起来不错。
  • 你的onChildAdded 有没有被打过电话?例如:如果您在该方法内的第一行放置一个断点,并在调试器中运行它,该断点是否会被命中?
  • 还要提到现在我已经更新了我的代码以使用 recyclerview 而不是 listview 但它仍然无法正常工作?
  • 既然你评论了我的回答,你的onChildAdded 被调用了,让我们在这里继续调试。下一步是在onChildAdded 中放置一个断点并单步执行代码。断点是否被击中?之后再进一步,它会进入if 语句吗?它是否得到正确的username? Stack Overflow 是一种非常低效的交互式调试器,因此最好自己一次性完成其中的许多步骤。
  • 我不明白,即使我注释掉了 firebase 方法,只是尝试用硬编码值创建一个简单的数组列表,然后列表也不会显示

标签: java android firebase listview firebase-realtime-database


【解决方案1】:

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

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

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

【讨论】:

  • 但是请帮忙回答一下
  • 我也对您的问题发表了评论,其中有一些问题需要我们提供帮助。请在此处回复,而不是在此处回复题外话。
  • yes onChildAdded 被调用,我的 firebase 数据库中有一个用户,它有一个 userType 管理器
猜你喜欢
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多