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下载的数据的片段中显示列表视图。
答案 0 :(得分: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();
}