你好,我有一个片段,然后是一个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;
}
由于应用程序运行完美,问题所在的地方确实很困惑,除了片段列表视图在再次启动片段时会消失或变为空白这一事实。
答案 0 :(得分:1)
由于适配器每次调用onStop()
方法时都会被删除,因此会出现此行为。
要解决此问题,您需要在onStart()
方法中再次设置适配器。
答案 1 :(得分:1)
通过添加子事件侦听器解决它
离。
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
}