为什么片段listview firebase数据再次启动后会变为空白?

时间:2018-02-21 16:21:57

标签: android listview firebase arraylist

你好,我有一个片段,然后是一个listview。它通常会在启动应用程序时加载listview数据,但是当我使用导航抽屉再次单击该片段时,所有这些都会消失,因此会留下空白页。

我的listview确实显示了自己,但问题是当我旋转屏幕或再次启动片段时,列表视图消失了。恩。来自prntscr.com/ihx3fg,其中列表视图可见。到列表视图消失的prntscr.com/ihx3th。

我可以问为什么会这样吗?

我的CustomAdapter代码

public class CustomAdapter extends BaseAdapter {
Context c;
ArrayList<User1> user;
public CustomAdapter(Context c, ArrayList<User1> user) {
    this.c = c;
    this.user = user;
}

@Override
public int getCount() {
    return user.size();
}

@Override
public Object getItem(int pos) {
    return user.get(pos);
}

@Override
public long getItemId(int pos) {
    return pos;
}

@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
    if(convertView==null){
        convertView= LayoutInflater.from(c).inflate(R.layout.model,viewGroup,false);
    }
    TextView nameTxt= (TextView) convertView.findViewById(R.id.nameTxt);
    TextView emailTxt= (TextView) convertView.findViewById(R.id.emailTxt);
    TextView dateTxt= (TextView) convertView.findViewById(R.id.dateTxt);
    final User1 user= (User1) this.getItem(position);
    nameTxt.setText(user.getName());
    emailTxt.setText(user.getEmail());
    dateTxt.setText(user.getDate());

    return convertView;
}

Firebasehelper代码

public class Firebasehelper {
DatabaseReference db;
Boolean saved=null;
ArrayList<User1> users=new ArrayList<>();
public Firebasehelper(DatabaseReference db) {
    this.db = db;
}
public Boolean save(User1 user) {
    if (user == null) {
        saved = false;
    } else {
        try {
            db.child("Accounts").child("Transaction").push().setValue(user);
            saved = true;

        } catch (DatabaseException e) {
            e.printStackTrace();
            saved = false;
        }
    }

    return saved;
}
private void fetchData(DataSnapshot dataSnapshot)
{
    User1 user=dataSnapshot.getValue(User1.class);
    users.add(user);

}
public ArrayList<User1>retrieve(){
    db.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            fetchData(dataSnapshot);

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            fetchData(dataSnapshot);

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return users;

我的片段活动代码

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   final View view = inflater.inflate(R.layout.fragment_member2, container, false);
    lv = (ListView) view.findViewById(R.id.lv);

    db= FirebaseDatabase.getInstance().getReference().child("Accounts").child("Users");
    helper=new Firebasehelper(db);

    adapter=new CustomAdapter(getActivity(),helper.retrieve());
    lv.setAdapter(adapter);



    // Inflate the layout for this fragment
    return view;



}

我的用户分类

public User1() {
    this.name=name;
    this.email=email;
    this.date=date;
}
public String getName(){
    return name;
}
public void setName(String name){
    this.name = name;
}
public String getEmail(){
    return email;
}
public void setEmail(String email){
    this.email=email;
}
public String getDate(){
    return date;
}
public void setDate(String date){
    this.date = date;
}

由于应用程序运行完美,问题所在的地方确实很困惑,除了片段列表视图在再次启动片段时会消失或变为空白这一事实。

2 个答案:

答案 0 :(得分:1)

由于适配器每次调用onStop()方法时都会被删除,因此会出现此行为。

要解决此问题,您需要在onStart()方法中再次设置适配器。

答案 1 :(得分:1)

通过添加子事件侦听器解决它

离。

db.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            lv.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }