2016-04-22 69 views
0

时选择spinner1那么其对应的数据会自动填充在spinner2获取值和微调点击

下面我得到的spinner1和微调2两个数据其特定的关键是XML格式的数据获取从URL则─

<a:Pair> 
<a:FromID>01</a:FromID>  <---This should Toast----> 
<a:FromName>INDIA</a:FromName><---On selecting this from spinner-------> 
<a:ToID>40</a:ToID> 
<a:ToName>TURKEY</a:ToName> 
</a:Pair> 

<a:Pair> 
<a:FromID>10</a:FromID> 
<a:FromName>USA</a:FromName> 
<a:ToID>01</a:ToID> 
<a:ToName>INDIA</a:ToName> 
</a:Pair> 

<a:Pair> 
<a:FromID>19</a:FromID> 
<a:FromName>CHINA</a:FromName> 
<a:ToID>10</a:ToID> 
<a:ToName>USA</a:ToName> 
</a:Pair> 

<a:Pair> 
<a:FromID>40</a:FromID> 
<a:FromName>TURKEY</a:FromName> 
<a:ToID>01</a:ToID> 
<a:ToName>INDIA</a:ToName> 
</a:Pair> 

</Result> 
</Response> 

但事实是,如果spinner1数据是美国选择那么我想敬酒其对应的ID我。 E-10 ...我将在今后的使用传递到下一个活动也

What i want

我下面的代码工作正常,我只想当spinner1选择它的ID从XML数据被选择,如果spinner2那么其相应的ID也应该敬酒。

MainActivity.java

public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener, OnClickListener { 

    ArrayList<String> title; 
    ArrayList<String> title2; 
    Button button; 
    Spinner spinner; 
    Spinner spinner2; 
    private EditText fromDateEtxt; 
    //private EditText toDateEtxt; 

    private DatePickerDialog fromDatePickerDialog; 
    //private DatePickerDialog toDatePickerDialog; 

    private SimpleDateFormat dateFormatter; 

    ArrayAdapter<String> from_adapter; 
    ArrayAdapter<String> from_adapter2; 
    Map<String, List<String>> values = new HashMap<String, List<String>>(); 
    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     title = new ArrayList<String>(); 
     title2 = new ArrayList<String>(); 

     button = (Button) findViewById(R.id.button1); 
     spinner = (Spinner) findViewById(R.id.spinner1); 
     spinner.setOnItemSelectedListener(this); 

     spinner2 = (Spinner) findViewById(R.id.spinner2); 
     //spinner2.setOnItemSelectedListener(this); 
     dateFormatter = new SimpleDateFormat("dd-MM-yyyy", Locale.US); 
     findViewsById(); 

     setDateTimeField(); 
     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 


     button.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       parse(); 

       from_adapter=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_item, title); 
       from_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       title2.clear(); 
       from_adapter2=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_item, title2); 
       from_adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 


       spinner.setAdapter(from_adapter); 
       //from_adapter2.clear(); 
       //from_adapter2.notifyDataSetChanged(); 
       spinner2.setAdapter(from_adapter2); 


      } 

      private Object from_adapter(int i) { 
       // TODO Auto-generated method stub 
       return null; 
      } 

     }); 


    } 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, 
      long id) { 
     String lang_Name = parent.getItemAtPosition(pos).toString(); 
     List<String> lang_Key = values.get(lang_Name); 
     from_adapter2.clear(); 
      for(String s : lang_Key){ 
        from_adapter2.insert(s, from_adapter2.getCount()); 
      } 
      from_adapter2.notifyDataSetChanged(); 
     Toast.makeText(parent.getContext(), ""+lang_Key, 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onNothingSelected(AdapterView<?> arg0) { 
    } 

    protected void parse() { 
     // TODO Auto-generated method stub 


     try { 

      URL url = new URL(
        "www.example.com"); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(new InputSource(url.openStream())); 
      doc.getDocumentElement().normalize(); 

      NodeList nodeList = doc.getElementsByTagName("a:Pair"); 
      for (int i = 0; i < nodeList.getLength(); i++) { 
       Element el = (Element) nodeList.item(i); 
       // get the a:W value 
       String awValue = el.getElementsByTagName("a:FromName").item(0).getTextContent(); 
       // add the above value in our map as key if it isn't present in the map, this key will 
       // have a list associated with it in which ALL the values for a:R will be stored, if 
       // the awValue key is present then you just add the new a:R value to its list 
       if (!values.containsKey(awValue)) { 
        values.put(awValue, new ArrayList<String>()); 

       } 
       // also add the value pointed by a:R to the list associated with a:W 
       String arValue = el.getElementsByTagName("a:ToName").item(0).getTextContent(); 
       values.get(awValue).add(arValue); 

       // Log.d("ADebugTag", "Value: " + arValue); 
      } 
      Log.d("ADebugTag", "Value: " + values); 
      for (int i = 0; i < nodeList.getLength(); i++) { 

       Node node = nodeList.item(i);  

       Element fstElmnt = (Element) node; 
       NodeList nameList = fstElmnt.getElementsByTagName("a:FromName"); 
       Element nameElement = (Element) nameList.item(0); 
       nameList = nameElement.getChildNodes();   

       NodeList websiteList = fstElmnt.getElementsByTagName("a:ToName"); 
       Element websiteElement = (Element) websiteList.item(0); 
       websiteList = websiteElement.getChildNodes(); 

       title.add(((Node) nameList.item(0)).getNodeValue()); 

      } 
      NodeList nodeList2 = doc.getElementsByTagName("a:Pair"); 
      for (int i = 0; i < nodeList2.getLength(); i++) { 

       Node node = nodeList2.item(i);  

       Element fstElmnt = (Element) node; 
       NodeList nameList = fstElmnt.getElementsByTagName("a:ToName"); 
       Element nameElement = (Element) nameList.item(0); 
       nameList = nameElement.getChildNodes();   
       title2.add(((Node) nameList.item(0)).getNodeValue()); 

      } 
      Set<String> set = new LinkedHashSet<String>(title); 
      title = new ArrayList<String>(set); 
      // Collection<String> set = new LinkedHashSet<String>(months); 
      Set<String> set2 = new LinkedHashSet<String>(title2); 
      title2 = new ArrayList<String>(set2); 
      System.out.println("list are"); 
      System.out.println(set); 
      System.out.println("list 2 are"); 
      System.out.println(set2); 
     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
     } 

    } 

    @Override 
    public void onClick(View view) { 
     if(view == fromDateEtxt) { 
      fromDatePickerDialog.show(); 
     } else { 
      Log.d("errorrrr", "soryy"); 
     } 

    } 
} 

我无法ID传递给

回答

0

您可以创建单独的行动被填充在微调和烤面包相应的数据ID在每个这样的微调上

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        // Show your toast for Spinner 1 
        from_adapter2.notifyDataSetChanged();// Changed 
       } 
      } 

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

      } 
     }); 

spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        // Show your toast for Spinner 2 
       } 
      } 

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

      } 
     }); 
+0

我能够得到微调值的点击,但不能得到它的对应 –

+0

@AndroidPutra请参阅我更改的行。 from_adapter2.notifyDataSetChanged();当您选择第一个值时,您需要再次刷新第二个微调器。希望你明白我的观点。 –

+0

我想我不能清楚地解释你....实际上,当我点击印度它有相应的ID 10哪(来自在线XML数据)我想,当印度被选中10应该烤面包 –