[英]Android recyclerview update item with socket after sort
如何在沒有 position 的情況下更新 Recyclerview 中的特定項目?
我有一個列表,我首先通過 REST 填寫。 然后任何從服務器端發生變化的數據,我都會通過套接字更新它。
要更新,需要該項目的位置。 為此,我在服務器端默認(靜態)考慮每個項目的 position,但是當用戶端對該列表進行排序時會出現問題。 (只是在本地排序)
排序后,item的位置就亂了,因此無法再通過靜態定義的位置來更新它們。
我怎樣才能做到這一點?
感謝您的想法!
我通過下面的 function 做到了:
private int findPosition(int staticPosition) {
for (int i = 0; i < dataList.size(); i++) {
if(dataList.get(i).getPosition() == staticPosition) {
return i;
}
}
return 0;
}
也許這是個壞主意,但工作得很好。 您可以在排序后或默認情況下在列表中找到項目的 position。
完整代碼:
Gson gson = new Gson();
public Emitter.Listener onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
if(getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
String s = args[0].toString();
Type type = new TypeToken< List<List<int>>>(){}.getType();
List<List<int>> list = gson.fromJson(s, type);
for (int i = 0; i < list.size(); i++) {
List<int> single = list.get(i);
int staticPostion = single.get(0);
int price = single.get(1);
if(marketAdapter != null) {
int postion = findPosition(staticPostion);
dataList.get(postion).setPrice(price);
marketAdapter.notifyItemChanged(postion);
}
}
}
});
}
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.