2017-08-31 1 views
0

Dans mon application Android, j'ai un spinner et une liste. Les données spinner et listview sont remplies par json. Ils sont à l'intérieur d'un fragment. Ma question est comment puis-je changer le contenu de ma listview sans changer l'écran entier quand un article dans le spinner est sélectionné? De votre question MerciComment puis-je modifier le contenu de ma liste lorsque je sélectionne un article dans mon spinner?

Voici mon code spinner

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) { 




     } 

Voici mon code JSON pour la fileuse

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; 


} 

Et voici le 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(); 
} 
+0

Avez-vous besoin d'appeler une autre requête JSON lorsque vous sélectionnez un élément dans le spinner? –

+0

simplement créer un nouvel objet pour votre vue de liste chaque fois qu'une certaine valeur est définie dans le spinner et le définir l'adaptateur 'adapter = new SimpleAdapter (quoi que, nouveau, values, vous, need, to, pass); lv.setAdapter (adaptateur); ' –

+0

@SakuraFukuyoshi oui J'essaie d'appeler une autre requête json chaque fois que l'utilisateur sélectionne une valeur dans le spinner – orange

Répondre

0

il est pas clair que devez-vous appeler API chaque fois que l'utilisateur sélectionne l'élément de votre spinner? Dans ce cas, il y aurait 2 possibilités.

PREMIER

Obtenez toutes les données de votre serveur dans une seule demande qui est des données pour votre fileuse et des données pour chaque valeur de votre article spinner à afficher dans ListView. Et organiser ces données dans la structure HashMap. Quelque chose comme ceci:

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

En HashMap vos clés sera produit Spinner et la valeur des données sera ListView correspondant à cet élément de spinner. Maintenant, chaque fois que l'utilisateur sélectionne un élément de votre spinner obtenir des valeurs en fonction de l'élément sélectionné et peupler votre listview avec ces données, vous devez définir à nouveau l'adaptateur dans votre listview avec un nouvel ensemble de données.

DEUXIÈME

Fetch toutes les données à afficher dans spinner. Maintenant, chaque fois que l'utilisateur sélectionne un élément, récupérez les données en fonction de l'élément sélectionné dans votre serveur et analysez la réponse et définissez à nouveau l'adaptateur pour votre listview avec le nouvel ensemble de données.

J'espère que cela vous aide.