Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 截击和碎片-如何等待请求结束_Android_Android Fragments_Android Volley - Fatal编程技术网

Android 截击和碎片-如何等待请求结束

Android 截击和碎片-如何等待请求结束,android,android-fragments,android-volley,Android,Android Fragments,Android Volley,我正在用截击请求一个JSONArray。同时,我在活动中创建片段,其中一个是ListFragment。我必须用从该请求中获得的数组填充列表。但是片段中的onCreateView()在我获取结果中的数组之前被调用,导致ListView中显示一个空数组 在填充数组时,我可以做些什么使其同步,或稍等片刻,或使列表自身重新绘制 我已经尝试了Volley Future请求,但我不知道如何在我的请求中与自定义侦听器一起使用它们。您的ListView应该有某种类型的数据适配器,可能是关联的(您需要创建它,它不

我正在用截击请求一个JSONArray。同时,我在活动中创建片段,其中一个是ListFragment。我必须用从该请求中获得的数组填充列表。但是片段中的onCreateView()在我获取结果中的数组之前被调用,导致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()
。我正在尝试。每次创建视图时都调用一个新的适配器使其工作,但是对于一个大的列表来说,这是完全无效的。我将尝试将其转换为响应,以便只有在请求更新时才能更改。