关闭并重新打开我的应用程序时,为什么ListView + onDataChange无法正确更新?

时间:2018-03-29 19:39:53

标签: android listview android-studio arraylist android-adapter

我正在尝试制作一个显示所有在线用户的屏幕,我已经做到了这一点,当您点击在线开关时,您可以在线显示,但是当您在线时看不到自己在列表中。除非我关闭应用程序并重新打开它,否则我可以看到自己。

你可以在我的onDataChange函数中看到列表视图: 1.清除 2.添加不是当前用户的所有用户

那么为什么呢,当应用程序再次加载时我可以在网上看到自己?

这是我的代码:

public class ClassmatesTab extends Fragment implements View.OnClickListener{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.tabclassmates, container, false);
    onlinetoggleButton = (Switch) rootView.findViewById(R.id.conlinetoggle);
    onlinetoggleButton.setOnClickListener(this);
    firebaseAuth = FirebaseAuth.getInstance();

    userList = new ArrayList<>();
    listview = (ListView) rootView.findViewById(R.id.clist);

     drefGetCurrentUserName = FirebaseDatabase.getInstance().getReference().child("users").child(firebaseAuth.getUid()).child("UserInfo").child("Name");

    final UserList adapter =  new UserList(getActivity(), userList);
    listview.setAdapter(adapter);

    drefGetUsersOnline = FirebaseDatabase.getInstance().getReference().child("Courses").child("CSC 4910").child("Users Online");
    drefGetUsersOnline.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            userList.clear();
            adapter.notifyDataSetChanged();

            for(DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                User user = userSnapshot.getValue(User.class);
                if(user.getUserEmail()!=FirebaseAuth.getInstance().getCurrentUser().getEmail()) {
                    userList.add(user);
                    adapter.notifyDataSetChanged();
                }
                listview.setOnItemClickListener(onListClick);
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    return rootView;
}

void setUserOnline(){
     // sets the user online - condensed to make it easier to read
}

@Override
public void onClick(View view) {
    if(view == onlinetoggleButton)
    {
        setUserOnline();
    }
}

1 个答案:

答案 0 :(得分:0)

您正在通过参考进行比较:

if(user.getUserEmail()!=FirebaseAuth.getInstance().getCurrentUser().getEmail())

如果getUserEmail()返回例如String,则最好使用.equals()

if ( ! user.getUserEmail().equals(FirebaseAuth.getInstance()...