
我从在线XML Web URL获取数据并成功获取数据.我正在使用hashmap键和它的值…我得到的键和值在我的LOGCAT中如下所示
{Jackfruit=[Cabbage, Kesar, Amond], Date=[van, hall, Brinjal], Amond=[hall, van, Brinjal]}1.当我第一次启动androID应用程序时,微调器和spinner2在spinner中填充所有数据都正确填充但在spinner2中所有键值都显示…但它应该只显示spinner1中键显示的值
2.当我更改spinner1键值时,两个微调器中的列表项都正确显示,然后所有下拉列表都显示正确的值.
3.当我点击spinner2值然后它作为键并开始显示是微调器中的值而不是它应该放置我点击的值.
我在记事本中草绘了它,看看问题
{Jackfruit=[Cabbage, Kesar, Amond], Date=[van, hall, Brinjal], Amond=[hall, van, Brinjal]}我的代码如下
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"); } } }可以看到草图中的问题
解决方法:
我自己和我的朋友Ricardo barroca从stackoverflow解决了这个问题
看到我的评论陈述
spinner.setonItemSelectedListener(this);spinner2 = (Spinner) findVIEwByID(R.ID.spinner2);//spinner2.setonItemSelectedListener(this);这解决了我的spinner2问题,即获取值而不是将自己设置为微调器.
从下面的代码中,它将预先填充的值清除为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); 总结 以上是内存溢出为你收集整理的java – Spinners值未正确设置全部内容,希望文章能够帮你解决java – Spinners值未正确设置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)