Android 截击和碎片-如何等待请求结束
我正在用截击请求一个JSONArray。同时,我在活动中创建片段,其中一个是ListFragment。我必须用从该请求中获得的数组填充列表。但是片段中的onCreateView()在我获取结果中的数组之前被调用,导致ListView中显示一个空数组 在填充数组时,我可以做些什么使其同步,或稍等片刻,或使列表自身重新绘制Android 截击和碎片-如何等待请求结束,android,android-fragments,android-volley,Android,Android Fragments,Android Volley,我正在用截击请求一个JSONArray。同时,我在活动中创建片段,其中一个是ListFragment。我必须用从该请求中获得的数组填充列表。但是片段中的onCreateView()在我获取结果中的数组之前被调用,导致ListView中显示一个空数组 在填充数组时,我可以做些什么使其同步,或稍等片刻,或使列表自身重新绘制 我已经尝试了Volley Future请求,但我不知道如何在我的请求中与自定义侦听器一起使用它们。您的ListView应该有某种类型的数据适配器,可能是关联的(您需要创建它,它不
我已经尝试了Volley Future请求,但我不知道如何在我的请求中与自定义侦听器一起使用它们。您的ListView应该有某种类型的数据适配器,可能是关联的(您需要创建它,它不是自动的) 如果您使用的是
ArrayAdapter
,请在侦听器中为您的截击请求添加add()
/addAll()
将结果放入适配器。适配器将自动导致ListView刷新
如果您创建了自己的适配器类型,而该类型不是从
ArrayAdapter
派生的,则必须手动处理更改通知。这就是它的作用——只要在适配器中进行更改后调用它,它就会刷新视图。我相信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);
从中复制了上述代码。也许您可以更新列表视图onResponse()回调。我有一个扩展BaseAdapter的自定义适配器,所以它应该是notyfing?还是没什么。不,我想BaseAdapter不会自动通知。您需要手动调用
notifyDataSetChanged()
。我正在尝试。每次创建视图时都调用一个新的适配器使其工作,但是对于一个大的列表来说,这是完全无效的。我将尝试将其转换为响应,以便只有在请求更新时才能更改。