【问题标题】:How Do I instantly refresh a component of a recyclerview in android studio?如何在android studio中立即刷新recyclerview的组件?
【发布时间】:2016-01-29 13:53:32
【问题描述】:

我有一个按钮,当单击该按钮时,我希望它自动更新文本,关键是文本来自服务器,我正在通过 JSON 解析它。我的问题是如何在没有完全刷新的情况下单击按钮时自动更新文本?

JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, URL_ANSWER, (String) null, new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    listblogs = parseJSONResponseQuestion(response);
                    mAdapterQuestion.setBloglist(listblogs);
                    System.out.println(response);
                    System.out.println("it worked!!!");
                }

            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    System.out.println(error);

                }
            });
            mRequestQueue.add(request);
        }


        private ArrayList<Blogs> parseJSONResponseQuestion(JSONArray response) {
            if (!response.equals("")) {
                ArrayList<Blogs> blogsArrayList = new ArrayList<>();
                try {
                    StringBuilder data = new StringBuilder();
            for (int i = 0; i < response.length(); i++) {
                JSONObject currentQuestions = response.getJSONObject(i);
                String text = currentQuestions.getString("text");
                String questionId = currentQuestions.getString("questionId");
                String votes = currentQuestions.getString("votes");
                String Answerid = currentQuestions.getString("id");
                String selectedId = currentQuestions.getString("selected");
                System.out.println(response.length() + "length");

                data.append(text + Answerid + "\n");

                System.out.println(data);
                Blogs blogs = new Blogs();
                blogs.setMtext(text);
                blogs.setVotes(votes);
                blogs.setId(Answerid);
                blogs.setSelected(selectedId);
                System.out.print(Answerid);
                listblogs.add(blogs);
            }
            System.out.println(data.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    return listblogs;
}

我唯一尝试过的就是在我的侦听器中调用 jsonarray

public void OnDown(View view) {
    CharSequence IdDownVote = ((TextView) ((RelativeLayout) view.getParent()).getChildAt(1)).getText();
    final RequestQueue mrequestQueue = VolleySingleton.getInstance().getRequestQueue();
    final String PUT_VOTE_DOWN = "someURL";

    StringRequest PostVoteUp = new StringRequest(Request.Method.PUT, PUT_VOTE_DOWN, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            System.out.println(response + "reponse");

        }

    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
            System.out.println("************Answer" + error + "error");
        }
    });
    mrequestQueue.add(PostVoteUp);

    System.out.println("VOTED DOWN");
}

public void ClickCardAnswer(View view) {
    System.out.println("YOU CLICKED THE CARD");
}

}

【问题讨论】:

  • 我不知道你所说的那句话是什么意思,我想刷新我的 recyclerview 的一个组件,而不是整个事情。
  • 请提供一些代码...你有什么尝试...
  • 我提供了一些代码
  • 用于编辑 +1 兄弟 :)
  • 大声谢谢,你有什么想法吗?

标签: java android arrays json refresh


【解决方案1】:

您的问题有点模棱两可,但我会尝试回答您可能遇到的两个问题:

  1. 您已更新适配器中的项目,但它不会显示新内容:使用适配器类的 notifyItemChanged(int position)

  2. 您想要更新适配器中的项目。除了适配器类的 setBloglist() 之外,您还需要创建一个方法来更新数据集中的某个项目(通过列表中的位置或通过 id 查找 - 我通常使用 ID 版本)。更新后见上文第1点。

【讨论】:

  • 问题不在于更新失败,它会更新选择的项目,但是,只有在页面完全刷新时才会更新。因此,我已经有了 notifyItemChanged,它会更新我的各个项目,我的问题是如何在不完全刷新的情况下立即更新组件
  • 如果“完全刷新页面”是指适配器重新初始化,那么您需要我的回答中的第 1 点。绘制后,除非您请求,否则项目不会在屏幕上更新。如果您有很多项目并且您滚动并返回更改的项目,它是否更新了?
  • 不,如果我滚动离开它只有在我进行完全刷新或适配器重新初始化时才更新。
  • 那么您没有更新适配器内部的项目,您只是在外部更新了它(可能在活动中)。您需要更新适配器的数据集(使用 onBindViewHolder() 显示时它获取值的数据集
猜你喜欢
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2018-11-19
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多