How to display two Spinners with linked data?
<p>I want to populate the Spinner-2 on basis of Spinner-1 .</p>

<p>For example if I select <strong>Newton</strong> then Spinner-2 will show only <strong>Force</strong> and <strong>Apple</strong> and not the other values and if I select <strong>Hiiii</strong> only <strong>ds</strong> should populate on the Spinner-2. This is just an example which I am showing in the image below(all values are dynamic in the original app).<em>Where ever there is any value selected in spinner-1 the value with the determined tag should be populated in the spinner-2.</em></p>

<p><a href="https://i.stack.imgur.com/vxLEC.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/vxLEC.png" alt="Image Link"></a></p>

<p><strong><em>UPDATE-3 MainActivity.java</em></strong></p>

<pre><code>public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener, OnClickListener {

    ArrayList&lt;String&gt; title;
    ArrayList&lt;String&gt; title2;
    Button button;
    Spinner spinner;
    Spinner spinner2;
    private EditText fromDateEtxt;
    //private EditText toDateEtxt;

    private DatePickerDialog fromDatePickerDialog;
    //private DatePickerDialog toDatePickerDialog;

    private SimpleDateFormat dateFormatter;

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


        title = new ArrayList&lt;String&gt;();
        title2 = new ArrayList&lt;String&gt;();

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

        spinner2 = (Spinner) findViewById(R.id.spinner2);
        spinner2.setOnItemSelectedListener(this); 
        findViewsById();

        setDateTimeField();
        if (android.os.Build.VERSION.SDK_INT &gt; 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&lt;String&gt;(getBaseContext(),android.R.layout.simple_spinner_item, title);
                from_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                from_adapter2=new ArrayAdapter&lt;String&gt;(getBaseContext(),android.R.layout.simple_spinner_item, title2);
                from_adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


                spinner.setAdapter(from_adapter);
                spinner2.setAdapter(from_adapter2);


            }

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

        });


    }



    public void onItemSelected(AdapterView&lt;?&gt; parent, View view, int pos,
            long id) {
        Toast.makeText(parent.getContext(), ""+spinner.getSelectedItem().toString().trim(),
                Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView&lt;?&gt; arg0) {
    }

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


        try {

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

            NodeList nodeList = doc.getElementsByTagName("a:AAAA");
            for (int i = 0; i &lt; nodeList.getLength(); i++) {
                Element el = (Element) nodeList.item(i);
                // get the a:W value
                String awValue = el.getElementsByTagName("a:W").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&lt;String&gt;());
                }
                // also add the value pointed by a:R to the list associated with a:W
                String arValue = el.getElementsByTagName("a:R").item(0).getTextContent();
                values.get(awValue).add(arValue);
                Log.d("ADebugTag", "Value: " + arValue);
            }
            for (int i = 0; i &lt; nodeList.getLength(); i++) {

                Node node = nodeList.item(i);       

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

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

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

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

                Node node = nodeList2.item(i);       

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

            }
            Set&lt;String&gt; set = new LinkedHashSet&lt;String&gt;(title);
            title = new ArrayList&lt;String&gt;(set);
            // Collection&lt;String&gt; set = new LinkedHashSet&lt;String&gt;(months);
            Set&lt;String&gt; set2 = new LinkedHashSet&lt;String&gt;(title2);
            title2 = new ArrayList&lt;String&gt;(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);
        }

    }
</code></pre>

<p><strong>Update-4</strong></p>

<p><strong>I am Getting the below values IN THE LOGCAT</strong> </p>

<pre><code>{
Jackfruit=[Cabbage, Kesar, Amond], 
Datia=[Kalpi, Kesar, Brinjal], 
Brinjal=[Cabbage, Kesar, Amond]
}
</code></pre>

<p>So,if <strong>Jackfruit</strong> is selected in <em>spinner1</em> then- <strong>Cabbage, Kesar, Amond</strong> should diplay in <em>spinner2</em></p>

<p><strong>The above logcat I am getting from the below code of the UPDATE-3 of the MainActivity.java</strong></p>

<pre><code>NodeList nodeList = doc.getElementsByTagName("a:AAAAA");
            for (int i = 0; i &lt; nodeList.getLength(); i++) {
                Element el = (Element) nodeList.item(i);
                // get the a:W value
                String awValue = el.getElementsByTagName("a:W").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&lt;String&gt;());

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

               // Log.d("ADebugTag", "Value: " + arValue);
            }
             Log.d("ADebugTag", "Value: " +  values);
</code></pre>

<p><strong>How should I pass the key value to spinner and if spinner key value is changed then respective values should change in spinner2</strong></p>