我正在使用Volley请求JSONArray。同时我在我的Activity中创建Fragments,其中一个是ListFragment。我必须用我从该请求获得的数组填充列表。但是片段中的onCreateView()被称为BEFORE我在结果中得到数组,导致在ListView中显示一个空数组。
在填充数组时,我该怎么做才能使其同步或稍等一下或让列表重绘?
我尝试过Volley Future Request,但我不知道如何在我的请求中使用自定义监听器。
答案 0 :(得分:0)
你的ListView应该有一些与之关联的数据适配器,可能是ArrayAdapter(你需要创建它,它不是自动的)。
如果你正在使用ArrayAdapter
,在你的排球请求的监听器中,add()
/ addAll()
你的结果进入适配器。适配器将自动使ListView刷新。
如果您已经创建了自己的适配器类型,而该类型并非来自ArrayAdapter
,那么您必须手动处理更改通知。这是notifyDataSetChanged()
的作用 - 只需在适配器中进行更改后调用它,它就会刷新视图。
答案 1 :(得分:0)
我相信Volley会根据您的请求为您提供回调听众的帮助。
final TextView mTextView = (TextView) findViewById(R.id.text);
...
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
mTextView.setText("Response is: "+ response.substring(0,500));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
从this link复制上述代码。也许你可以更新onResponse()回调列表视图。