当前位置: 首页 > 知识库问答 >
问题:

无法刷新Spinner所选项的ListView以从url获取新数据

鄢朝斑
2023-03-14

>

  • 我无法刷新旋转项选择上的列表视图。
  • 我希望基于spinner的items值构建新的url,以获取新的json数据并转换为ListView。
  • 您还可以帮助我说明如何创建一个方法来传递新url以获取新数据。
  • 主要问题与标题相同,您的每一个帮助都将不胜感激。

    String [] array_values = {"All "," 5"," 4"," 3"," 2"," 1"};
    final Spinner spinner = view.findViewById(R.id.spinner);
    
    final ArrayAdapter<String> spinner_adapter = new ArrayAdapter<>(this.getActivity(), android.R.layout.simple_spinner_item, array_values);
    spinner_adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    spinner.setAdapter(spinner_adapter);
    
    final String spinnerValue = spinner.getSelectedItem().toString();
    url = "http://website.com/demo.php?pswd=kvpswd";
    
    listView = (ListView) view.findViewById(R.id.demo_list_view);
    adapter = new CustomListAdapter(this.getActivity(), List);
    listView.setAdapter(adapter);
    
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
          //  listView.setAdapter(null);
          String spinnerValue = spinner.getSelectedItem().toString();
            url = "http://website.com/demo.php?pswd="+spinnerValue;
            adapter.notifyDataSetChanged();
        }
        public void onNothingSelected(AdapterView<?> parent) {
    
        }
    });
    
    // Creating volley request obj
    JsonArrayRequest Requset = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    hidePDialog();
    
                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {
    
                            JSONObject obj = response.getJSONObject(i);
    
                            DataFetcher datafetcher = new DataFetcher();
    
                            datafetcher.set1(obj.getString("item1"));
                            datafetcher.set2(obj.getString("item2"));
                            datafetcher.set3(obj.getString("item3"));
                            datafetcher.set4(obj.getString("item4"));
                            datafetcher.set5(obj.getString("item5"));
                            datafetcher.set6(obj.getString("item6"));
                            datafetcher.set7(obj.getString("item7"));
                            datafetcher.set8(obj.getString("item8"));
    
                            // adding list to list array
                            List.add(datafetcher);
    
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
    
                    }
    
                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            hidePDialog();
    
        }
    });
    
  • 共有1个答案

    段干庆
    2023-03-14

    方法用于api调用,并将url和设置数据传递到列表视图中。下面的方法进入旋转器选择时间。

     private void callApiData(String url){
        // Creating volley request obj
        JsonArrayRequest Requset = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());
                        hidePDialog();
    
                        // Parsing json
                        for (int i = 0; i < response.length(); i++) {
                            try {
    
                                JSONObject obj = response.getJSONObject(i);
    
                                DataFetcher datafetcher = new DataFetcher();
    
                                datafetcher.set1(obj.getString("item1"));
                                datafetcher.set2(obj.getString("item2"));
                                datafetcher.set3(obj.getString("item3"));
                                datafetcher.set4(obj.getString("item4"));
                                datafetcher.set5(obj.getString("item5"));
                                datafetcher.set6(obj.getString("item6"));
                                datafetcher.set7(obj.getString("item7"));
                                datafetcher.set8(obj.getString("item8"));
    
                                // adding list to list array
                                List.add(datafetcher);
                                setAdapter();
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
    
                        }
    
                        // notifying list adapter about data changes
                        // so that it renders the list view with updated data
                        adapter.notifyDataSetChanged();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                hidePDialog();
    
            }
        });
    }
    

    并为适配器设置制定了一个单独的方法。

      private void setAdapter(){
        if(adpter==null){
            adapter = new CustomListAdapter(this.getActivity(), List);
            listView.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
        else{
            adapter.notifyDataSetChanged();
        }
    }
    
     类似资料:
    • 你好, 我有一个问题,使ListView更新“良好”。这是一个包含一堆播放列表项的播放列表。基本上,当项的样式或内容发生变化时,我希望它在ListView中发生变化。当前,我刷新了整个列表,我猜这是可行的,但它似乎是一个很差(不清楚)的解决方案对我来说(它闪烁)。有没有一种方法可以刷新/重绘一个特定的物品?我还没找到。 null

    • 用户授权Google Calendar后,NodeJS服务将代码、AccessToken和RefreshToken保存到存储中。 我也尝试将代码交换为新的令牌,但没有帮助 400错误的请求响应:{“error”:“invalid_grant”,“error_description”:“auth代码格式错误”} 尝试使用Calendar.NewService访问 }

    • 问题内容: 我正在用Java编写命令行程序的终端包装,然后使用ProcessBuilder生成子进程。将击键发送到子,我只是写从GUI直奔 给出。为了从子流程接收输出,我基本上有一个while循环,它从子流程的中读取: 这工作, 只有 当我立刻冲在输出 都 结束。也就是说,我必须刷新每个用户输入,并且子进程必须刷新自己的输入才能发生操作。否则,将等待从未真正发送的等待数据的块(子进程的stdout

    • 本文向大家介绍android中ListView数据刷新时的同步方法,包括了android中ListView数据刷新时的同步方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了android中ListView数据刷新时的同步方法。分享给大家供大家参考。具体实现方法如下: 代码只是提取的部分,应该没多大影响. 上面集合mGroupArray存在数据共享,测试多次发现报错有两种: =>1.jav

    • 首先请原谅我的英语不正确。。。 我有一个primeface的组件的问题,我试图刷新一个p: selectOneMenu从一个p:命令按钮,但它不工作(它的工作在另一个xhtml页面,但不是在这里,我不明白为什么...) 首先,我从更新backingbean属性的p:autocomplete中选择一个项目(例如:userChoose)。 然后p:commandButton可以调用他的监听器并将use

    • 我有Mainactive,它保存片段。我的一个片段(参与者)检查数据库中是否有任何内容。如果没有,则显示带有消息以添加数据的片段(空参与者列表)。如果是,它显示带有2个选项卡的TabHost片段,其中一个包含带有数据库条目的ListView片段(参与者列表)。有一个FAB按钮可以添加更多记录。添加另一条记录后如何刷新ListView?我不确定,因为TabHost不适用于我在应用程序中使用的Frag