【问题标题】:How do I change the content of my listview when an item in my spinner is selected?选择微调器中的项目后,如何更改列表视图的内容?
【发布时间】:2017-08-31 03:41:57
【问题描述】:

在我的 android 应用程序中,我有一个微调器和一个列表视图。微调器和列表视图数据由 json 填充。它们在一个片段内。我的问题是我如何在选择旋转器中的项目时更改我的列表视图中的内容而不更改整个屏幕?谢谢

这是我的微调器代码

 try
        {
            URL url = new URL (Config.URL_SPIN);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            is = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            StringBuilder sb = new StringBuilder();
            while((line = bufferedReader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try
        {
            JSONArray JA = new JSONArray(result);
            JSONObject json;


            e_name = new String[JA.length()];
            e_gender = new String[JA.length()];

            for(int i = 0; i<JA.length(); i++)
            {
                json        =  JA.getJSONObject(i);
                e_gender[i] =  json.getString("e_gender");
                e_name[i]   =  json.getString("e_name");
            }
            list1.add("All");
            list1.add("NonSports");
            for(int i = 0; i<e_name.length; i++)
            {
                list1.add(e_name[i] + " "+e_gender[i]);
            }



        } catch (JSONException e) {
            e.printStackTrace();
        }
        spinner_fn();



        return rootView;


    }


private void spinner_fn() {
        ArrayAdapter<String> spinner = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list1);
        spinner1.setAdapter(spinner);
        spinner1.setSelection(0);
        spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {




        }

这是我的微调器 JSON 代码

lv = (ListView) rootView.findViewById(R.id.listView2);
        spinner1 = (Spinner) rootView.findViewById(R.id.sp1);
        getJSON();
        try
        {
            URL url = new URL (Config.URL_SPIN);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            is = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            StringBuilder sb = new StringBuilder();
            while((line = bufferedReader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
    }

    try
    {
        JSONArray JA = new JSONArray(result);
        JSONObject json;


        e_name = new String[JA.length()];
        e_gender = new String[JA.length()];

        for(int i = 0; i<JA.length(); i++)
        {
            json        =  JA.getJSONObject(i);
            e_gender[i] =  json.getString("e_gender");
            e_name[i]   =  json.getString("e_name");
        }
        list1.add("All");
        list1.add("NonSports");
        for(int i = 0; i<e_name.length; i++)
        {
            list1.add(e_name[i] + " "+e_gender[i]);
        }



    } catch (JSONException e) {
        e.printStackTrace();
    }
    spinner_fn();



    return rootView;


}

这里是 ListView

private void showResult() {
    JSONObject jsonObject;
    ArrayList<HashMap<String, String>> list = new ArrayList<>();
    try {
        jsonObject = new JSONObject(JSON_STRING);
        JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY2);

        for (int i = 0; i < result.length(); i++) {
            JSONObject jo = result.getJSONObject(i);
            String teamone = jo.getString(Config.TAG_teamone);
            String teamonepts = jo.getString(Config.TAG_teamonepts);
            String teamtwo = jo.getString(Config.TAG_teamtwo);
            String teamtwopts = jo.getString(Config.TAG_teamtwopts);
            String e_name = jo.getString(Config.TAG_e_name);
            String e_gender = jo.getString(Config.TAG_e_gender);
            String m_no = jo.getString(Config.TAG_m_no);
            HashMap<String, String> match = new HashMap<>();
            match.put(Config.TAG_teamone, teamone);
            match.put(Config.TAG_teamonepts, teamonepts);
            match.put(Config.TAG_teamtwo, teamtwo);
            match.put(Config.TAG_teamtwopts, teamtwopts);
            match.put(Config.TAG_e_name, e_name);
            match.put(Config.TAG_e_gender, e_gender);
            match.put(Config.TAG_m_no, m_no);
            list.add(match);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    ListAdapter adapter = new SimpleAdapter(
            getActivity(), list, R.layout.gamesadapterlayout,
            new String[]{Config.TAG_teamone, Config.TAG_teamonepts, Config.TAG_teamtwo, Config.TAG_teamtwopts, Config.TAG_e_name, Config.TAG_e_gender, Config.TAG_m_no},
            new int[]{R.id.team1, R.id.score1, R.id.team2, R.id.score2, R.id.Type, R.id.s_gender});
    lv.setAdapter(adapter);
}

private void getJSON() {
    class GetJSON extends AsyncTask<Void, Void, String> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            JSON_STRING = s;
            showResult();
        }


        @Override
        protected String doInBackground(Void... params) {
            RequestHandler rh = new RequestHandler();
            s = rh.sendGetRequest(Config.URL_GAMES);
            return s;
        }
    }
    GetJSON gj = new GetJSON();
    gj.execute();
}

【问题讨论】:

  • 在spinner中选择项目时是否需要调用另一个Json请求?
  • 只要在微调器中设置一些值并设置适配器adapter = new SimpleAdapter(whatever,new,values,you,need,to,pass);,然后设置适配器lv.setAdapter(adapter);,只需为列表视图创建一个新对象
  • @SakuraFukuyoshi 是的,每当用户从微调器中选择一个值时,我都会尝试调用另一个 json 请求
  • 那么你怎么知道当一个项目被选中时你会调用什么json请求呢?它也在ArrayList中吗? list1 数组用于将在微调器中显示的项目对吗?
  • 是的,先生。谢谢

标签: android json listview android-fragments spinner


【解决方案1】:

从您的问题来看,您是否需要在每次用户从您的微调器中选择项目时调用 API?在这种情况下,有两种可能性。

第一

仅在一个请求中从您的服务器获取所有数据,即您的微调器的数据和要在 ListView 中显示的微调器项目的每个值的数据。并将这些数据排列成HashMap结构。像这样的:

HashMap<String,Object> allData = new HashMap<>();

在 HashMap 中,您的键将是 Spinner 项,值将是与该 Spinner 项对应的列表视图数据。现在,每当用户从您的微调器中选择任何项目时,都会根据该选定项目获取值并使用该数据填充您的列表视图,您需要在列表视图中再次使用新数据集设置适配器。

第二次

获取所有数据以显示在微调器中。现在,每当用户选择任何项目时,都会根据从您的服务器中选择的项目获取数据并解析响应并再次使用新数据集为您的列表视图设置适配器。

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多