我使用创建日期的顺序从FireBase数据库获取数据,并显示在ListView中,但是我首先显示创建的第一本书: 例如:我创建了书 1
,然后是书 2,然后是书 3,然后是书 4,然后是书 5,然后是书 6 、书 7 、书 8 。假设在我的列表中查看我正在显示添加的 5 本最新书籍,并在滚动列表视图中显示其他两本书:
我有什么:我的列表视图书籍是这样显示的:
- 规格书1
- 规格书2
- 册3
- 册4
- 册5
滚动列表查看我有什么:
- 第6册
- 册7
- 册8
我想要的是按最新添加的显示我的书,如下所示:
- 册8
- 册7
- 册6
- 册5
- 册4
我想要的滚动列表视图:
- 册3
- 规格书2
- 册1
片段代码(显示列表视图(:
listAdapter = new FeedListAdapter(getActivity(), feedItems);
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(myClickListener);
ref.orderByChild("date_creation").limitToFirst(5).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnap : dataSnapshot.getChildren()) {
Book valueBook = dataSnap.getValue(Book.class);
keyId = dataSnap.getKey();
String titreLivreToDisplay = valueBook.getNom_livre();
String descLivreToDisplay = valueBook.getDesc_livre();
String prixLivreToDisplay = valueBook.getPrix_livre();
timeToDisplay = valueBook.getDate_creation();
valueBook.setNom_livre(titreLivreToDisplay);
valueBook.setDesc_livre(descLivreToDisplay);
valueBook.setPrix_livre(prixLivreToDisplay);
valueBook.setDate_creation(timeToDisplay);
feedItems.add(valueBook);
}
Collections.sort(feedItems, new Comparator<Book>() {
@Override
public int compare(Book book1, Book book2)
{
return book1.getDate_creation().compareTo(book2.getDate_creation());
}
});
listAdapter.notifyDataSetChanged();
}
});
代码滚动列表视图:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
private int currentVisibleItemCount;
private int currentScrollState;
private int currentFirstVisibleItem;
private int totalItem;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
int first = view.getFirstVisiblePosition();
int count = view.getChildCount();
if (scrollState == SCROLL_STATE_IDLE || (first + count > listAdapter.getCount()) ) {
listView.invalidateViews();
}
this.currentScrollState = scrollState;
this.isScrollCompleted();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
this.currentFirstVisibleItem = firstVisibleItem;
this.currentVisibleItemCount = visibleItemCount;
this.totalItem = totalItemCount;
}
private void isScrollCompleted() {
if (totalItem - currentFirstVisibleItem == currentVisibleItemCount
&& this.currentScrollState == SCROLL_STATE_IDLE) {
ref.orderByChild("date_creation").startAt(timeToDisplay+1).limitToFirst(2).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnap : dataSnapshot.getChildren()) {
Book valueBook = dataSnap.getValue(Book.class);
keyId = dataSnap.getKey();
String titreLivreToDisplay = valueBook.getNom_livre();
String descLivreToDisplay = valueBook.getDesc_livre();
String prixLivreToDisplay = valueBook.getPrix_livre();
timeToDisplay = valueBook.getDate_creation();
valueBook.setNom_livre(titreLivreToDisplay);
valueBook.setDesc_livre(descLivreToDisplay);
valueBook.setPrix_livre(prixLivreToDisplay);
valueBook.setDate_creation(timeToDisplay);
feedItems.add(valueBook);
}
listAdapter.notifyDataSetChanged();
}
});
}
}
});
适配器代码 :
public FeedListAdapter(Context context, List<Book> feedItems) {
this.context = context;
this.feedItems = feedItems;
this.mStringFilterList=feedItems;
}
static class ViewHolder {
TextView name ;
TextView timestamp;
TextView statusMsg ;
TextView prix;
}
@Override
public int getCount() {
return feedItems.size();
}
@Override
public Object getItem(int location) {
return feedItems.get(location);
}
@Override
public long getItemId(int position) {
return feedItems.indexOf(getItem(position));
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final int pos = position;
if (inflater == null)
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.feed_item, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.name_book_display);
holder.timestamp = (TextView) convertView.findViewById(R.id.timestamp);
holder.statusMsg = (TextView) convertView.findViewById(R.id.desc_display);
holder.prix = (TextView) convertView.findViewById(R.id.prix_display);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
Book item = feedItems.get(position);
if (!TextUtils.isEmpty(item.getNom_livre())) {
holder.name.setText(item.getNom_livre());
holder.name.setVisibility(View.VISIBLE);
} else {
holder.name.setVisibility(View.GONE);
}
if (!TextUtils.isEmpty(item.getDate_creation())) {
holder.timestamp.setText(item.getDate_creation());
holder.timestamp.setVisibility(View.VISIBLE);
} else {
holder.timestamp.setVisibility(View.GONE);
}
if (!TextUtils.isEmpty(item.getDesc_livre())) {
holder.statusMsg.setText(item.getDesc_livre());
holder.statusMsg.setVisibility(View.VISIBLE);
} else {
holder.statusMsg.setVisibility(View.GONE);
}
if (item.getPrix_livre() != null) {
holder.prix.setText(item.getPrix_livre() + " DH");
holder.prix.setVisibility(View.VISIBLE);
} else {
holder.prix.setVisibility(View.GONE);
}
return convertView;
}
每当您将项目添加到映射到您的 列表视图,将该项添加到位置 0
像下面一样
feedItems.add(0,valueBook);
上行将在顶部添加最新项目。