簡體   English   中英

Android recyclerview 在排序后使用套接字更新項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM