2016-03-01 120 views
0

我把我的數據放在spinners.Data是來自URL.How使微調,所以當大綱是ICSE被選中它只反映那些年級,主題有ICSE?如何根據第一個微調器中選擇的數據在第二個微調器中顯示數據?

我的JSON

{ 
    "results":[ 
    { 
    "syllabus":"CBSE", 
    "grade":"5", 
    "subject":"Kannada", 
    "topic":"Grammar Level 1", 
    "id":28 
    }, 

    { 
    "syllabus":"CBSE", 
    "grade":"5", 
    "subject":"Science", 
    "topic":"The Natural Calamities", 
    "id":16 
    }, 


    { 
    "syllabus":"CBSE", 
    "grade":"6", 
    "subject":"Science", 
    "topic":"Movement in Animals", 
    "id":116 
    }, 

    { 
    "syllabus":"CBSE", 
    "grade":"6", 
    "subject":"Social Studies", 
    "topic":"Contact With Distant Lands", 
    "id":59 
    }, 

    { 
    "syllabus":"CBSE", 
    "grade":"6", 
    "subject":"Social Studies", 
    "topic":"Gupta Empire", 
    "id":34 
    }, 


    "id":148 
    }, 
    { 
    "syllabus":"ICSE", 
    "grade":"6", 
    "subject":"Computers", 
    "topic":"Introduction to QBASIC Programming", 
    "id":44 
    }, 


    { 
    "syllabus":"ICSE", 
    "grade":"6", 
    "subject":"Social Studies - History", 
    "topic":"The Vedic Age", 
    "id":42 
    }, 
    { 
    "syllabus":"Entrance Exam - Karnataka CET", 
    "grade":"12", 
    "subject":"Mathematics", 
    "topic":"Previous Year Question Papers", 
    "id":121 
    }, 
    { 
    "syllabus":"Entrance Exam - Karnataka CET", 
    "grade":"12", 
    "subject":"Science - Biology", 
    "topic":"Previous Year Question Papers", 
    "id":117 
    }, 
    { 
    "syllabus":"Entrance Exam - Karnataka CET", 
    "grade":"12", 
    "subject":"Science - Chemistry", 
    "topic":"Previous Year Question Papers", 
    "id":110 
    }, 
    { 
    "syllabus":"Entrance Exam - Karnataka CET", 
    "grade":"12", 
    "subject":"Science - Physics", 
    "topic":"Previous Year Question Papers", 
    "id":104 
    } 

    } 

任何幫助將是巨大的,我

MainActivity類別

public class MainActivity extends Activity { 
JSONObject jsonobject; 
JSONArray jsonarray; 

JSONArray jsonarray2; 
JSONObject jsonobject2; 

ArrayList<String> worldlist; 
ArrayList<String> worldlist2; 
ArrayList<String> worldlist3; 
ArrayList<Results> world; 
TextView textView; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView = (TextView) findViewById(R.id.topic); 
    // Download JSON file AsyncTask 
    new DownloadJSON().execute(); 

} 

// Download JSON file AsyncTask 
private class DownloadJSON extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 

     world = new ArrayList<Results>(); 
     // Create an array to populate the spinner 
     worldlist = new ArrayList<String>(); 

     worldlist2 = new ArrayList<String>(); 
     worldlist3 = new ArrayList<String>(); 

     // JSON file URL address 
     jsonobject = JSONfunctions 
       .getJSONfromURL("https://www.wonderslate.com/funlearn/topicsMap"); 

     try { 
      // Locate the NodeList name 
      jsonarray = jsonobject.getJSONArray("results"); 
      for (int i = 0; i < jsonarray.length(); i++) { 
       jsonobject = jsonarray.getJSONObject(i); 

       Results worldpop = new Results(); 

       worldpop.setSyllabus(jsonobject.optString("syllabus")); 






       worldpop.setGrade(jsonobject.optString("grade")); 
       worldpop.setSubject(jsonobject.optString("subject")); 
       worldpop.setId(jsonobject.optString("id")); 
       world.add(worldpop); 


       worldlist.add(jsonobject.optString("syllabus")); 
       worldlist2.add(jsonobject.optString("grade")); 
       worldlist3.add(jsonobject.optString("subject")); 

      } 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 
     // Locate the spinner in activity_main.xml 

     final Spinner mySpinner = (Spinner) findViewById(R.id.syllabus); 
     final Spinner mySpinner2 = (Spinner) findViewById(R.id.grade); 
     Spinner mySpinner3 = (Spinner) findViewById(R.id.subject); 

     // Spinner adapter 


     final LinkedHashSet<String>[] listToSet = new LinkedHashSet[]{new LinkedHashSet<String>(worldlist)}; 

     //Creating Arraylist without duplicate values 
     final List<String> worldlistnew = new ArrayList<String>(listToSet[0]); 


     mySpinner 
       .setAdapter(new ArrayAdapter<String>(MainActivity.this, 
         android.R.layout.simple_spinner_dropdown_item, 
         worldlistnew)); 


     //Creating ArrayList without duplicate values 

     listToSet[0] = new LinkedHashSet<String>(worldlist3); 
     //Creating Arraylist without duplicate values 
     final List<String> worldlistnew3 = new ArrayList<String>(listToSet[0]); 
     mySpinner3 
       .setAdapter(new ArrayAdapter<String>(MainActivity.this, 
         android.R.layout.simple_spinner_dropdown_item, 
         worldlistnew3)); 

     // Spinner on item click listener 
     mySpinner 
       .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 


        @Override 
        public void onItemSelected(AdapterView<?> arg0, 
               View arg1, int position, long arg3) { 

         if (mySpinner.getSelectedItem().toString().equals("CBSE")) { 

          // if (mySpinner.getId() == R.id.syllabus) 




          listToSet[0] = new LinkedHashSet<String>(worldlist2); 

          final List<String> worldlistnew2 = new ArrayList<String>(listToSet[0]); 


          mySpinner2 
            .setAdapter(new ArrayAdapter<String>(MainActivity.this, 
              android.R.layout.simple_spinner_dropdown_item, 
              worldlistnew2)); 


          textView.setText("21"); 


         } else if (mySpinner.getSelectedItem().toString().equals("ICSE")) { 
          textView.setText("31"); 
         } else if (mySpinner.getSelectedItem().toString().equals("Entrance Exam - Karnataka CET")) 

         { 
          textView.setText("41"); 

         } 

        } 

        @Override 
        public void onNothingSelected(AdapterView<?> arg0) { 
         // TODO Auto-generated method stub 
        } 
       }); 

    } 
} 

private void resetGrade(String grade) { 
} 

}

+0

可以分列出您的主列表的數據然後在子微調器中顯示數據。 贊如果你已經選擇了Spinner的值是x,那麼得到x位置的值並迭代它,並將它匹配到整個列表中,如果你找到了,然後創建一個子列表並向它添加匹配的項目,然後在二級微調器中顯示它 –

回答

0

先從doInBackground方法中刪除這些行。沒有必要在這裏創建單獨的ArrayList ..

worldlist.add(jsonobject.optString("syllabus")); 
      worldlist2.add(jsonobject.optString("grade")); 
      worldlist3.add(jsonobject.optString("subject")); 

聲明這些全球ArrayList中......

ArrayList<String> syllabuslist; 
    ArrayList<String> gradlist; 
    ArrayList<String> subjectlist; 

,並呼籲異步任務之前初始化onCreate方法這些微調(DownloadJSON())

Spinner mySpinner = (Spinner) findViewById(R.id.syllabus); 
Spinner mySpinner2 = (Spinner) findViewById(R.id.grade); 
Spinner mySpinner3 = (Spinner) findViewById(R.id.subject); 

現在設置微調在onPostExecute()方法....刪除額外的代碼,你寫在onPostExcute ...只是複製我的代碼

@Override 
    protected void onPostExecute(Void args) { 

     // Spinner adapter 
     syllabuslist = new ArrayList<String>(); 
     for (Results bean : world) { 
      syllabuslist.add(bean.getSyllabus()); 
     } 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, syllabuslist); 

     adapter 
       .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     mySpinner.setAdapter(adapter); 

     mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
             int arg2, long arg3) { 

       String syllabus_name = mySpinner.getItemAtPosition(arg2).toString(); 


       gradlist = new ArrayList<String>(); 
       for (int i = 0; i < world.size(); i++) { 

        if (world.get(i).getSyllabus().equals(syllabus_name)) { 
         gradlist.add(world.get(i).getGrade()); 
        } 

       } 

       setGradeSpinner();//its a method to create grade spinner 
      } 

      public void onNothingSelected(AdapterView<?> arg0) { 

      } 
     }); 
    } 


     public void setGradeSpinner(){ 

      if(gradlist!=null && gradlist.size()>0) 
      { 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
         android.R.layout.simple_spinner_item, gradlist); 

       adapter 
         .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

       mySpinner2.setAdapter(adapter); 

       mySpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

        @Override 
        public void onItemSelected(AdapterView<?> arg0, View arg1, 
               int arg2, long arg3) { 

         String grade_name = mySpinner2.getItemAtPosition(arg2).toString(); 


         subjectlist = new ArrayList<String>(); 
         for (int i = 0; i < world.size(); i++) { 

          if (world.get(i).getGrade().equals(grade_name)) { 
           subjectlist.add(world.get(i).getSubject()); 
          } 

         } 

         // setSubjectSpinner();//its a method to create subject spinner like as I do for garde spinner 
        } 

        public void onNothingSelected(AdapterView<?> arg0) { 

        } 
       }); 

      } 

    } 

希望這將幫助你...

+0

謝謝...剛試過你的代碼和一個編譯錯誤是存在的。編譯器告訴初始化成績單。 –

+0

gradlist = new ArrayList ();加上之前的循環 –

+0

好的謝謝......。 –

0

在您的第一個微調控件的onitemclick監聽器中,根據所選項目更改第二個微調控件的列表數據並調用。

  spinner2Adapter.notifyDatasetChanged(); 

您不必在每次更改spinner1中的選擇時都創建新的適配器並列出。

+0

好的讓我試試.. –

+0

確保發送給第二個微調器和第二個微調控制器適配器的列表僅初始化一次。 –

0

@Shwetabh辛格我cannt理解你question.But我做了一個城市選擇的例子。你可以參考它。在這裏在第一個微調我列出的城市名稱。並根據城市選擇第二微調區按照價值從微調選擇refcted

{ 
    "City": [ 
    { 
     "name": "Ahmedabad", 
     "City_area1" : "Ghatlodia", 
     "City_area2" : "Chandlodia", 
     "City_area3" : "Other" 
    }, 
    { 
     "name": "Hydarabad", 
     "City_area1" : "IIT", 
     "City_area2" : "Faridabad", 
     "City_area3" : "Other" 
    }, 
    { 
     "name": "Noida", 
     "City_area1" : "Sector-50", 
     "City_area2" : "Sector-41", 
     "City_area3" : "Other" 
    } 
    ] 
} 

MainActivity.java

public class MainActivity extends Activity { 
Spinner selectcityspinner; 
ArrayList<String> citylist; 
ArrayList<city> cityandarealist; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    return super.onCreateOptionsMenu(menu); 
} 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    selectcityspinner = (Spinner)findViewById(R.id.selectcityspin); 
    citylist = new ArrayList<>(); 
    new cityAsynTask().execute("Jason data url");//put your url over here 
} 
public class cityAsynTask extends AsyncTask<String,Void,Boolean> 
{ 

    @Override 
    protected Boolean doInBackground(String... params) { 

     cityandarealist = new ArrayList<city>(); 

     try { 
      HttpClient client = new DefaultHttpClient(); 
      HttpPost post = new HttpPost(params[0]); 
      HttpResponse response = client.execute(post); 
      int status = response.getStatusLine().getStatusCode(); 
      if (status == 200) { 
       HttpEntity entity = response.getEntity(); 
       String data = EntityUtils.toString(entity); 
       JSONObject jobjcity = new JSONObject(data); 
       JSONArray jarray = jobjcity.getJSONArray("City"); 
       for (int i = 0;i < jarray.length();i++){ 
        city city = new city(); 
        JSONObject jrealobject = jarray.getJSONObject(i); 
        city.setCity(jrealobject.getString("name")); 
        city.setArea1(jrealobject.getString("City_area1")); 
        city.setArea2(jrealobject.getString("City_area2")); 
        city.setArea3(jrealobject.getString("City_area3")); 
        cityandarealist.add(city); 
        citylist.add(jrealobject.getString("name")); 

       } 
       return true; 
      } 

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


     return false; 
    } 

    @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
     if(aBoolean == false){ 
      Toast.makeText(MainActivity.this,"data isnot recieved",Toast.LENGTH_SHORT).show(); 

     } else { 
      ArrayAdapter<String> adapter = new ArrayAdapter<String> (MainActivity.this,android.R.layout.simple_spinner_item,citylist); 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      selectcityspinner.setAdapter(adapter); 
      selectcityspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_LONG).show(); 

        String Country = String.valueOf(parent.getItemAtPosition(position)); 
        Spinner selectareaspinner = (Spinner) findViewById(R.id.selectareaspin); 
        List<String> AreaList = new ArrayList<String>(); 
        AreaList.add(cityandarealist.get(position).getArea1()); 
        AreaList.add(cityandarealist.get(position).getArea2()); 
        AreaList.add(cityandarealist.get(position).getArea3()); 
        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, AreaList); 
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        adapter1.notifyDataSetChanged(); 
        selectareaspinner.setAdapter(adapter1); 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> parent) { 

       } 
      }); 
     } 

    } 
} 

}

+0

謝謝,但我的要求不同於此。 –

+0

解釋您的需求。 – Bhaumik

+0

請參見我的json板,在第一個微調器中重複cbse,icse等。如果選擇icse,那麼我只想顯示具有icse {「CBSE」,「 」等級「 :「5」, 「subject」:「Kannada」, 「topic」:「Grammar Level 1」, 「id」:28 }, –

相關問題