I持って私の主な活動ののonCreateメソッド内の項目のリストを照会し、私のアダプタにそれらを設定し、次の方法:onBindViewHolderで新しいデータ(Parse/Android)のみをクエリする方法はありますか?
private void retrieveYeets() {
String groupId = ParseUser.getCurrentUser().getString("groupId");
ParseQuery<ParseObject> query = new ParseQuery<>(ParseConstants.CLASS_YEET);
query.whereContains(ParseConstants.KEY_GROUP_ID, groupId);
query.orderByDescending("lastReplyUpdatedAt");
query.setLimit(1000);
query.findInBackground((yeets, e) -> {
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
}
if (e == null) {
// We found messages!
mYeets = yeets;
/*System.out.println(yeets);*/
FeedAdapter adapter = new FeedAdapter(getContext(), yeets);
adapter.setHasStableIds(true);
mRecyclerView.setHasFixedSize(true);
adapter.notifyDataSetChanged();
mRecyclerView.setAdapter(adapter);
}
});
}
、私はから追加データを取得する方法を持っています投稿者のユーザー名、フルネーム、およびプロフィール画像などのポインタ、:
private void downloadProfilePicture(ViewHolder holder, ParseObject yeet) {
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo(ParseConstants.KEY_OBJECT_ID, yeet.getParseObject(ParseConstants.KEY_SENDER_AUTHOR_POINTER).getObjectId());
query.findInBackground((user, e) -> {
if (e == null) for (ParseObject userObject : user) {
if (userObject.getParseFile("profilePicture") != null) {
String profilePictureURL = userObject.getParseFile("profilePicture").getUrl();
// Asynchronously display the profile picture downloaded from Parse
if (profilePictureURL != null) {
Picasso.with(mContext)
.load(profilePictureURL)
.networkPolicy(NetworkPolicy.OFFLINE)
.placeholder(R.color.placeholderblue)
.fit()
.into(holder.profilePicture);
} else {
holder.profilePicture.setImageResource(Integer.parseInt(String.valueOf(R.drawable.ic_profile_pic_add)));
}
}
if (!(userObject.getString(ParseConstants.KEY_AUTHOR_FULL_NAME).isEmpty())) {
holder.fullName.setText(userObject.getString(ParseConstants.KEY_AUTHOR_FULL_NAME));
} else {
holder.fullName.setText("Anonymous Lose");
}
holder.username.setText(userObject.getString(ParseConstants.KEY_USERNAME));
}
});
}
重要な部分は次のとおりです。retrieveYeets()がSwipeRefreshLayoutリフレッシュに呼ばれています。だから私がリフレッシュするたびに、私は再びすべてのデータをすべて取得しています。
私が何を意味するかを見るために、更新時にTwitterのUIを見てください。私はまだフェッチされていない新しいデータを取得し、それをアダプタの上部に追加したいだけです。それ以外の場合は、不要なクエリを実行しています。プロファイルの画像、ユーザー名、フルネームはすべての更新時に新しいクエリで再ダウンロードされるため、フィード全体に点滅します。
目的:最後に作成されたオブジェクトの日付
- クエリ既存のアダプタに新しいデータのみ
更新:
private void refreshYeets(Date date, FeedAdapter adapter) {
String groupId = ParseUser.getCurrentUser().getString("groupId");
ParseQuery<ParseObject> query = new ParseQuery<>(ParseConstants.CLASS_YEET);
query.whereContains(ParseConstants.KEY_GROUP_ID, groupId);
query.orderByDescending("lastReplyUpdatedAt");
if (date != null)
query.whereLessThanOrEqualTo("createdAt", date);
query.setLimit(1000);
query.findInBackground((yeets, e) -> {
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
}
if (e == null) {
// We found messages!
mYeets.addAll(0, yeets); //This should append new messages to the top
/*System.out.println(yeets);*/
if (mRecyclerView.getAdapter() == null) {
adapter.setHasStableIds(true);
mRecyclerView.setHasFixedSize(true);
adapter.notifyDataSetChanged();
mRecyclerView.setAdapter(adapter);
} else {
adapter.notifyDataSetChanged();
}
}
});
}
これは動作しますが、アダプタリストオブジェクトの多くが置き換えられ、間違った位置にあります。ここでどのような訂正をする必要がありますか?どういうわけか新しいオブジェクトの数でリストから相殺する必要がありますか?ここで
で作成されたと呼ばれる、すべての解析行に関連付けられたフィールドがあります。私はあなたがすでに前のデータを持っているので、その日付の前に作成された行を比較して取り出すクエリを作成することができると思います。それが役に立ったら教えてください。 –
これをチェックしてください:https://www.parse.com/questions/android-api-query-to-get-all-objects-created-today –
いいえ、新しいデータを既存のアダプタに追加しますか? – santafebound