2015-04-24 83 views
0

當用戶點擊位置元素,然後應用程序填充警報對話框來選擇位置,這些位置來自於PHP服務器open。下面是我已經使用的代碼。創建動態警報對話框有多個選項來選擇

宣言

  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建議我程序如何創建此位置列表動態與空值請注意我已創建位置爲固定大小的數組。

回答

0

在你的文章執行中,當在locations_resp上循環時,你需要一個條件來檢查一個位置爲空或空的位置,這樣你就不會將它添加到你的location數組中。

我會建議使用列表而不是數組,以便您的列表視圖匹配數據源的大小(例如,顯示2個位置的列表,而不是8個空的10個位置的列表)。

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陣列的本地位置表示instend所以你可以這樣做:

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

,並與定位的目標工作。

+0

謝謝你的建議@Kalem –

+0

我試過了你的代碼,但是新的錯誤發生在 'builder.setItems(locations.toArray(),new DialogInterface.OnClickListener()'說「把第一個參數拋到java.lang。 CharSequence []'「@Kalem –

+0

我的不好,使用第二個建議你需要定義一個Adapter並使用'AlertDialog.Builder.setAdapter(ListAdapter adapter,DialogInterface.OnClickListener listener)'而不是'AlertDialog.Builder.setItems(CharSequence [] items,DialogInterface.OnClickListener listener)'。因此,如果你不想定義一個適配器(你應該如果你想自定義行視圖)堅持第一個建議。 – Kalem