我希望列表项显示运动名称以及参加的时间和日期。答案并不复杂,但需要一点深刻的理解。
我应该创建一个模型类来获取日期和时间戳:
public class MemberAttendance {
private String sport;
private long timestamp;
public MemberAttendance() {
}
public MemberAttendance(String sport, long timestamp) {
this.sport = sport;
this.timestamp = timestamp;
}
public String getSport() {
return sport;
}
public long getTimestamp() {
return timestamp;
}
public void setSport(String sport) {
this.sport = sport;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
然后像以前一样创建一个引用:
final DatabaseReference attendanceRef = database.getReference()
.child(Constants.MEMBERS_NODE).child(userID).child("attendance").child(today);
然后像这样初始化适配器:
attendanceAdapter = new MemberAttendanceAdapter(getActivity(), MemberAttendance.class,
R.layout.list_item_attendance, attendanceRef);
attendanceListView.setAdapter(attendanceAdapter);
真正的窍门是在适配器中,我需要让运动等于引用键,即运动名称:
public class MemberAttendanceAdapter extends FirebaseListAdapter<MemberAttendance> {
public MemberAttendanceAdapter(Activity activity, Class<MemberAttendance> modelClass, int modelLayout, Query ref) {
super(activity, modelClass, modelLayout, ref);
}
@Override
protected void populateView(View view, MemberAttendance memberAttendance, int i) {
String sport = getRef(i).getKey();
// Create views and assign values
TextView sportTxtView = (TextView) view.findViewById(R.id.sportTxtView);
sportTxtView.setText(sport);
// This time stamp can return date and time, so there is no need to create a date getter
Date timestamp = new Date(memberAttendance.getTimestamp());
TextView dayTxtView = (TextView) view.findViewById(R.id.dayTxtView);
dayTxtView.setText(new SimpleDateFormat("dd-MM-yyyy").format(timestamp));
// Show the time
TextView dateTxtView = (TextView) view.findViewById(R.id.dateTxtView);
dateTxtView.setText(new SimpleDateFormat("hh:mm a").format(timestamp));
}
}