簡體   English   中英

如何動態更改回收者視圖項?

[英]How to change recycler view item dynamically?

我創建了一個RecyclerView來顯示我已連接的每個節點。 在RecyclerView中,我添加了兩個按鈕和一個TextView。 TextView將顯示節點的當前狀態,即節點當前處於打開還是關閉狀態。 節點正在通過MQTT發送其當前狀態,我能夠檢測到我的應用程序中每個節點的當前狀態,但無法根據它更新TextView。 如何更新TextView?

我嘗試添加新項目並刪除上一個項目,但是它們都不適合我。 我在檢測到狀態消息來自哪個節點的地方添加了代碼。

在此處輸入圖片說明

//From this section I am getting details of my all node stored into the database
    public void addData()
        {
            pumpList = new ArrayList<>();

            StringRequest stringRequest = new StringRequest(Request.Method.GET, REQUEST_URL,
                    new Response.Listener<String>()
                    {
                        @Override
                        public void onResponse(String response)
                        {
                            try
                            {
                                JSONArray pumpData = new JSONArray(response);

                                for(int i = 0; i < pumpData.length(); i++)
                                {
                                    JSONObject pump = pumpData.getJSONObject(i);

                                    String name = pump.getString("name");
                                    String device_id =  pump.getString("device_id");
                                    String stat = pump.getString("stat");

                                    Log.d("HTTP",String.valueOf(name));
                                    Log.d("HTTP",String.valueOf(device_id));
                                    Log.d("HTTP",String.valueOf(stat));

                                    pumpList.add(new pumpData(name,device_id,stat));
                                }

                                pumpAdapter adapter = new pumpAdapter(getActivity(),pumpList);
                                recyclerView.setAdapter(adapter);
                                progressDialog.dismiss();
                            }
                            catch (JSONException e)
                            {
                                e.printStackTrace();
                                progressDialog.dismiss();
                            }
                        }
                    },
                    new Response.ErrorListener()
                    {
                        @Override
                        public void onErrorResponse(VolleyError error)
                        {
                            Toast.makeText(getActivity(),error.getMessage(),Toast.LENGTH_SHORT).show();
                            progressDialog.dismiss();
                        }
                    });
            Volley.newRequestQueue(getActivity()).add(stringRequest);
        }

//When I get a message over MQTT then I am showing from which device the MQTT Message is Coming from
    public void changeDataByFiltering(String MQTT_TOPIC, String MQTT_PAYLOAD)
        {
            for(pumpData pD: pumpList)
            {
                insertStringSubscribe INSSUB = new insertStringSubscribe();
                String mqtt_topic_from_list = INSSUB.insertString(pD.getDeviceID());
                if(mqtt_topic_from_list.trim().toLowerCase().equals(MQTT_TOPIC.trim().toLowerCase()))
                [enter image description here][1]{
                    if(MQTT_PAYLOAD.trim().toLowerCase().equals(payloadON.trim().toLowerCase()))
                    {
                        Toast.makeText(mCtx, pD.getName()+": ON",Toast.LENGTH_SHORT).show();
                    }

                    if(MQTT_PAYLOAD.trim().toLowerCase().equals(payloadOFF.trim().toLowerCase()))
                    {
                        Toast.makeText(mCtx, pD.getName()+": OFF",Toast.LENGTH_SHORT).show();
                    }
                }
            }
        }

我假設我們有一個List<String> data作為我們的數據源,並且我們有rvadapter這是我們的RecyclerView.Adapter 我們將按照以下步驟進行更新:

data.set(position,"newdata");
rvadapter.notifyItemChanged(position);

另外,您可以更改項目范圍。 並插入新項目或刪除項目,但必須調用rvadapter notify...相關函數,但是如果您重新創建data ,例如:

data = new ...然后您必須使用notifydatasetchanged ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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