我有以下活動:
public class EventGuestListForHostActivity extends AppCompatActivity {
private ListView guestsListView;
private ArrayList<Guest> guestsArrayList;
private DatabaseReference dbReferenceEvent;
private GuestListGuestNameAdapter guestListAdapter;
private String eventId;
private String guestKey;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("HMMM", "test");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_guest_list_for_host);
guestsListView = (ListView) findViewById(R.id.guestListView);
guestsArrayList = new ArrayList<>();
dbReferenceEvent = FirebaseDatabase.getInstance()
.getReference("Event");
guestListAdapter = new GuestListGuestNameAdapter(this, R.layout.guest_list_adapter, guestsArrayList);
guestsListView.setAdapter(guestListAdapter);
eventId = getIntent().getExtras().getString("event_id");
guestsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Guest g = (Guest) adapterView.getItemAtPosition(i);
Intent intent = new Intent(EventGuestListForHostActivity.this, HostApproveAndDeny.class);
intent.putExtra("guest_id", g.userId);
intent.putExtra("member_id", g.memberId);
intent.putExtra("event_id", eventId);
intent.putExtra("guest_key", g.guestKey);
intent.putExtra("approval_status", g.approvalStatus);
intent.putExtra("guest_name", g.name);
startActivity(intent);
}
});
guestsArrayList.clear();
guestListAdapter.clear();
guestListAdapter.notifyDataSetChanged();
getData();
}
public void getData() {
guestsArrayList.clear();
guestListAdapter.clear();
guestListAdapter.notifyDataSetChanged();
dbReferenceEvent.child(eventId).child("guestList").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
Guest guest = snapshot.getValue(Guest.class);
guest.guestKey = snapshot.getKey();
guestsArrayList.add(guest);
guestListAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onResume() {
super.onResume();
guestsArrayList.clear();
guestListAdapter.clear();
guestListAdapter.notifyDataSetChanged();
guestsListView.setAdapter(null);
guestListAdapter = null;
guestListAdapter = new GuestListGuestNameAdapter(this, R.layout.guest_list_adapter, guestsArrayList);
guestsListView.setAdapter(guestListAdapter);
getData();
}
當用戶通過按下 android 后退按鈕回傳此活動時,我希望重新填充 ListView(因為 Firebase 中的某些資料可能已更改)。使用當前代碼,我讓 ListView 始終為每個元素重復,當活動第一次啟動時事件。我不確定為什么我使用的大量清除不能阻止這種情況發生。任何幫助或指示表示贊賞。
uj5u.com熱心網友回復:
您不需要在onCreate 中呼叫getData因為即使您是第一次進入 Activity/Fragment 也會呼叫onResume。所以你可以從onCreate 中洗掉呼叫。這就是為什么即使是第一次也有重復的原因。

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360242.html
上一篇:子字串到Java中的陣列
下一篇:列印時如何加長并保持精度
