当用户点击location元素然后app填充警告对话框以选择位置时,这些位置来自php服务器open .Below是我使用过的代码。
声明
final String locations[] = new String[100];
final String locations_id[] = new String[100];
onPostExecute
jObj = new JSONObject(json);
JSONArray locations_resp = jObj.getJSONArray("Locations");
JSONArray manufacturer_resp = jObj.getJSONArray("Manufacturers");
for(int i=0;i<locations_resp.length();i++)
{
JSONObject c = locations_resp.getJSONObject(i);
int id = c.getInt("id");
String name = c.getString("title");
locations[i]=name;
locations_id[i]=id+"";
//Log.d("Locations","Id ="+id+" name = "+name );
}
onclick事件
location_ele.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Select Location");
builder.setItems(locations, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// the user clicked on colors[which]
location_ele.setText(locations[which]);
location=locations_id[which].toString();
}
});
builder.show();
}
});
屏幕截图
观察屏幕。位置随机出现一些空值,只有4个位置来自API.Please建议我程序如何动态创建这个位置列表,没有Null值请注意我已经创建了Locations为固定大小的数组。
答案 0 :(得分:0)
在帖子执行中,在locations_resp
上循环时需要一个条件来检查某个位置是空还是空,这样您就不会将它添加到location
数组中。
我建议使用List而不是数组,这样你的listview就匹配数据源的大小(例如显示2个位置的列表,而不是10个位置的列表,其中8个为空)。
List<String> locations = new ArrayList<String>();
List<String> locationsId = new ArrayList<String>();
for (JSONObject c : locations_resp)
{
int id = c.getInt("id");
String name = c.getString("title");
if(name != null && name.length > 0)
{
locations.add(name);
locationsId.add(String.valueOf(id));
}
}
我还建议有一个本地位置表示,以便拥有2个阵列,这样你就可以做到这样的事情:
List<Location> locations = new ArrayList<Location>();
for (JSONObject c : locations_resp)
{
int id = c.getInt("id");
String name = c.getString("title");
if(name != null && name.length > 0)
{
locations.add(new Location(name, id));
}
}
并使用Location对象。