创建动态警报对话框,其中包含多个要选择的选项

时间:2015-04-24 08:15:14

标签: java android

当用户点击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();
           }
       });

屏幕截图 enter image description here

观察屏幕。位置随机出现一些空值,只有4个位置来自API.Please建议我程序如何动态创建这个位置列表,没有Null值请注意我已经创建了Locations为固定大小的数组。

1 个答案:

答案 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));
    }
}

enter image description here

我还建议有一个本地位置表示,以便拥有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对象。