我正在从在线XML Web URL中获取数据并成功获取数据。我正在使用 hashmap键和值 ...而我得到的键和值如下所示,这在我的LOGCAT-

{
Jackfruit=[Cabbage, Kesar, Amond],
Date=[van, hall, Brinjal],
Amond=[hall, van, Brinjal]
}

1. 。当我第一次启动android应用程序时,Spinner和spinner2被正确地填充在spinner中,所有数据都被正确填充,但是在spinner2中,所有键值都显示了...但是它应该仅显示spinner1中显示的键值。

2. 当我更改spinner1键值时,两个微调器中的列表项均正确显示,然后所有下拉列表均显示正确的值。

3. 当我单击spinner2值时,它充当键并开始在spinner中显示is值,而应放置我单击的值。

我在记事本中草绘了一下问题
{
Jackfruit=[Cabbage, Kesar, Amond],
Date=[van, hall, Brinjal],
Amond=[hall, van, Brinjal]
}

java - 微调器值设置不正确-LMLPHP

我的代码如下
MainActivity.java
@SuppressLint("NewApi")
public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener, OnClickListener {

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

    private DatePickerDialog FromFruitsDatePickerDialog;
    //private DatePickerDialog toDatePickerDialog;

    private SimpleDateFormat dateFormatter;

    ArrayAdapter<String> FromFruits_adapter;
    ArrayAdapter<String> FromFruits_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) {
                parse();

                FromFruits_adapter=new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_item, title);
                FromFruits_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                FromFruits_adapter2 = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_item, title2);
                FromFruits_adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                spinner.setAdapter(FromFruits_adapter);
                FromFruits_adapter2.clear();
                FromFruits_adapter2.notifyDataSetChanged();
                spinner2.setAdapter(FromFruits_adapter2);
            }

            private Object FromFruits_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);
        FromFruits_adapter2.clear();
        for(String s : lang_Key){
            FromFruits_adapter2.insert(s, FromFruits_adapter2.getCount());
        }
        FromFruits_adapter2.notifyDataSetChanged();
        Toast.makeText(parent.getContext(), ""+lang_Key,
        Toast.LENGTH_LONG).show();
    }

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

    protected void parse() {
        try {
            URL url = new URL("web url www.xyz.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("Fruits");
            for (int i = 0; i < nodeList.getLength(); i++) {
                Element el = (Element) nodeList.item(i);
                // get the a:W value
                String awValue = el.getElementsByTagName("FromFruits").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("ToFruits").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("FromFruits");
                Element nameElement = (Element) nameList.item(0);
                nameList = nameElement.getChildNodes();

                NodeList websiteList = fstElmnt.getElementsByTagName("ToFruits");
                Element websiteElement = (Element) websiteList.item(0);
                websiteList = websiteElement.getChildNodes();

                title.add(((Node) nameList.item(0)).getNodeValue());
            }
            NodeList nodeList2 = doc.getElementsByTagName("Fruits");
            for (int i = 0; i < nodeList2.getLength(); i++) {
                Node node = nodeList2.item(i);

                Element fstElmnt = (Element) node;
                NodeList nameList = fstElmnt.getElementsByTagName("ToFruits");
                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 == FromFruitsDateEtxt) {
            FromFruitsDatePickerDialog.show();
        } else {
            Log.d("errorrrr", "soryy");
        }
    }
}

可以在素描中看到问题

java - 微调器值设置不正确-LMLPHP

最佳答案

我自己和我的一个 friend Ricardo Barroca从stackoverflow解决了这个问题
看到我的评论陈述

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

这解决了我的spinner2点击问题,该问题是获取值而不是将自身设置为spinner。

并从下面的代码中清除了预先填充的值到spinner1和spinner2
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);

10-05 21:40