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-点击按钮更新GridView_Android_Gridview_Notifydatasetchanged - Fatal编程技术网

Android-点击按钮更新GridView

Android-点击按钮更新GridView,android,gridview,notifydatasetchanged,Android,Gridview,Notifydatasetchanged,我正在尝试设置一个gridview,它将在执行新搜索时刷新 这是我设置gridview的命令 final GridElement_Results adapter = new GridElement_Results(this, savedInstanceState, track_name, album_name, track_num, album_id, album_link); grid = (GridView)findViewById(R.id.grid_results);

我正在尝试设置一个gridview,它将在执行新搜索时刷新

这是我设置gridview的命令

    final GridElement_Results adapter = new GridElement_Results(this, savedInstanceState, track_name, album_name, track_num, album_id, album_link);
    grid = (GridView)findViewById(R.id.grid_results);
    grid.setAdapter(adapter);
正如您所看到的,我正在向它传递一组数组

单击一个按钮,调用函数getTracks(),从服务器获取新数据。阵列将使用新数据进行更新,我已验证这些数据是否有效

icon_activesearch.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {

                                        getTracks("newsearchterm");

                                        adapter.notifyDataSetChanged();
                                        grid.invalidateViews();

                                    }
                                }
    );
然后调用adapter.notifyDataSetChanged()和grid.invalidateViews()来更新和重画网格。但很明显我做错了什么

是因为我将适配器设置为最终适配器吗?要在onClick方法中访问它,我需要将其设置为final


我应该做些什么来让它工作。

您应该等到新的数据获取之后再通知适配器,但是您在getTracks()之后立即调用notify,没有任何延迟。

add
getTracks()
方法您是否将新结果传递给适配器?从我看来,您没有将List、ArrayList或Array类型的对象传递给适配器。适配器是如何获得显示的数据的?我应该添加:getTracks()更新一组全局数组:track\u name、album\u name等。我认为一旦这些数组被更新,并调用notifyDataSetChanged(),网格就会自动更新。在不创建新适配器的情况下,如何将这些数组再次传递给现有适配器?您的意思是在http请求完成之前调用notifyDataSetChanged吗?我怎样才能增加延迟?睡觉