目前我可以通过两种方式填充我的微调器,一种方式给我数据库的结果,这是我需要的但旋转器中的文本是JSON格式,它都可以工作,但看起来很糟糕,然后如果我提取来自JSON的名称并使用它我丢失了名称值对的值部分。
我被告知我需要使用BaseAdapter子类才能完成我需要做的事情。下面的代码就像我喜欢的那样,但数据是硬编码的,这是没用的。
我想要做的是使用从数据库返回的JSON数据填充下面的MyData。
此代码:
final MyData items[] = new MyData[4];
items[0] = new MyData( "Ken's Plimbing","125738468");
items[1] = new MyData( "Peninsula Pests","3787906453");
items[2] = new MyData( "Joe's Electrical","129754354");
items[3] = new MyData( "Garderning Supplies","097803452");*/
ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
userSpinner.setAdapter(adapter);
userSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
MyData d = items[position];
Toast.makeText(PropertyManagement.this, d.getValue(), Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> parent) {
}
}
);
使用此BaseAdapter:
class MyData {
public MyData( String spinnerText, String value ) {
this.spinnerText = spinnerText;
this.value = value;
}
public String getSpinnerText() {
return spinnerText;
}
public String getValue() {
return value;
}
public String toString() {
return spinnerText;
}
String spinnerText;
String value;
作品!
但我需要用从数据库返回的JSON数组填充MyData。根据这篇文章的第一段,我一直这样做。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(PropertyManagement.this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
final MyData items[] = new MyData[4];
for (int i = 0; i < myUsers.length(); ++i)
{
adapter.add(myUsers.getJSONObject(i).getString("BusinessName"));
};
userSpinner.setAdapter(adapter);
JSONArray /字符串看起来像这样,
{"BusinessName":"Petes Plumbing","BusinessPhone":"0434943743"},{"BusinessName":"Joes Electrical","BusinessPhone":"0466367279"}
非常感谢任何帮助。
干杯,
麦克
答案 0 :(得分:0)
你在这里非常接近,而不是你的for循环中的adapter.add你需要将它添加到项目中。像这样重构:
final MyData items[] = new MyData[myUsers.length()];
for (int i = 0; i < MyData.length(); ++i){
items[i] = new MyData(myUsers.getJSONObject(i).getString("BusinessName"), myUsers.getJSONObject(i).getString("BusinessPhone"));
}
ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
userSpinner.setAdapter(adapter);
这里的不同之处在于您找到了JSONArray的长度,创建了一个新大小的MyItem数组。然后根据JSONArray中的值使用新的MyItems初始化项目。最后,您正在创建带有项目的适配器,就像您在第一个示例中所做的那样。我在这个例子中假设myUsers在JSONArray中。