我想在Spinner-1的基础上填充Spinner-2。
例如,如果我选择牛顿,那么Spinner-2将仅显示强制和 Apple ,而不显示其他值,如果我选择 Hiiii 只有 ds 应填充在Spinner-2上。这只是我在下图中显示的一个示例(所有值在原始应用程序中都是动态的)。如果在spinner-1中选择了任何值,则应在微调器中填充具有已确定标记的值-2。
UPDATE-3 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);
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);
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);
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) {
Toast.makeText(parent.getContext(), ""+spinner.getSelectedItem().toString().trim(),
Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView<?> 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 < 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<String>());
}
// 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 < 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 < 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<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);
}
}
更新-4
我在LOGCAT中获得以下值
{
Jackfruit=[Cabbage, Kesar, Amond],
Datia=[Kalpi, Kesar, Brinjal],
Brinjal=[Cabbage, Kesar, Amond]
}
所以,如果在 spinner1 中选择 Jackfruit ,那么 - Cabbage,Kesar,Amond 应该在 spinner2 中显示
我从以下MainActivity.java的UPDATE-3代码中获取上述logcat
NodeList nodeList = doc.getElementsByTagName("a:AAAAA");
for (int i = 0; i < 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<String>());
}
// 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);
如何将键值传递给微调器,如果微调器键值已更改,则各个值应在spinner2中更改
答案 0 :(得分:1)
第一次填充spinner1。要执行此操作,请更改parse方法以返回主标记列表(title1
),并将它们设置为微调器。
然后在spinner1上使用setOnItemSelectedListener
,在其中解析XML以查找与所选项相关的项,并根据该项填充spinner2。您可以使用position
获取所选项目。为此,编写另一个方法(或使用相同的方法,使用if
条件来说这不是主标记)从spinner1中选择项作为输入和返回子项。然后将此列表添加到spinner2。
最后你必须有这样的东西:
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position)
{
title2=parse(spinner1.get(position)
//set title2 to spinner2
});