2013-11-14 3 views
0

Что я пытаюсь архивировать; Я хочу получить всплывающее окно со списком BikeLocations. В настоящий момент работает мой код. Работает в значении, что все id мои по возрастанию от 0 до, например. 5. Но, когда я удаляю BikeLocations и добавляю новый BikeLocations. Элементы id этих элементов не от 0 до, например. 5, но от 5 до, например, 10. Это означает, что я не могу получить idBikeLocation с onClick(DialogInterface dialog, int item), потому что это не возвращает idBikeLocation, а индекс массива.Добавить тег в AlertDialog

List<BikeLocation> locations = BikeLocation.listAll(BikeLocation.class); 
    final ArrayList<String> arrData = new ArrayList<String>(); 
    for (BikeLocation location : locations) { 
     int id = Integer.parseInt(location.getId().toString()); 
     arrData.add((id - 1), location.getTitle()); 

    } 
    if (arrData.size() != 0) { 
     CharSequence cs[] = arrData 
       .toArray(new CharSequence[arrData.size()]); 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Selecteer een locatie"); 
     builder.setItems(cs, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int item) { 
       /* 
       * Locations loc = db.getLocation((item + 1)); LatLng 
       * testLocation = new LatLng(Float.valueOf(loc 
       * .getLattitude()), Float.valueOf(loc.getLongitude())); 
       * googleMap.addMarker(new MarkerOptions().position(
       * testLocation).title(loc.getTitle())); 
       */ 
       long longId; 
       int intId; 
       intId = item + 1; 
       longId = Long.valueOf(intId); 
       BikeLocation loc = BikeLocation.findById(
         BikeLocation.class, longId); 

       // locatie aanmaken 
       LatLng addLocation = new LatLng(loc.getLatitude(), loc 
         .getLongitude()); 
       /*googleMap.addMarker(new MarkerOptions().position(
         addLocation).title(loc.getTitle()));*/ 
       addMarkerToMap(loc.getLatitude(), loc.getLongitude(),loc.getTitle(), false); 

      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } else { 
     Toast.makeText(this, "Geen items gevonden", 10).show(); 
    } 

Теперь, мой вопрос: есть ли способ привязать какой-то код BikeLocation к товару?

+0

Вы можете использовать свои диалоги как диалоговые окна, тогда легко добавить к ним тег! -> Диалог DialogFragment = новый DialogFragment(); \t \t \t dialog.show (getSupportFragmentManager(), "MyFragmentTag"); – bofredo

ответ

0

Непосредственно диалоговое окно может указывать только на позицию выбранного элемента. Вы можете сохранить свой собственный массив поиска для идентификатора, основанного на позиции. Когда вы заполняете свои arrData (содержащие строки местоположения), заполняйте массив arrIds рядом с ним (содержащий идентификаторы).

final ArrayList<String> arrData = new ArrayList<String>(); 
final ArrayList<Integer> arrIds = new ArrayList<Integer>(); 

for (BikeLocation location : locations) { 
     int id = Integer.parseInt(location.getId().toString()); 
     arrData.add(location.getTitle()); 
     arrIds.add(id); 
    } 

Тогда в onClickListener, вы можете получить идентификатор с чем-то вроде:

int id = arrIds.get(item -1); 

(я не уверен, что это должно быть «пункт» или «пункт -1» Я забыл. если диалоговое окно возвращает позицию, нажатую как нулевая или нет ...)

0

Если вы объявляете места как окончательные, вы можете получить доступ к этому списку в методе onClick. Вы можете сразу получить BikeLocation и не нуждаться в идентификаторе местоположения.

 @Override 
     public void onClick(DialogInterface dialog, int item) { 
      /* 
      * Locations loc = db.getLocation((item + 1)); LatLng 
      * testLocation = new LatLng(Float.valueOf(loc 
      * .getLattitude()), Float.valueOf(loc.getLongitude())); 
      * googleMap.addMarker(new MarkerOptions().position(
      * testLocation).title(loc.getTitle())); 
      */ 

      BikeLocation loc = locations.get(item); 

      // locatie aanmaken 
      LatLng addLocation = new LatLng(loc.getLatitude(), loc 
        .getLongitude()); 
      /*googleMap.addMarker(new MarkerOptions().position(
        addLocation).title(loc.getTitle()));*/ 
      addMarkerToMap(loc.getLatitude(), loc.getLongitude(),loc.getTitle(), false); 

     } 
Смежные вопросы