0

我要归档的内容;我想得到一个弹出列表,其中包含BikeLocations. 此刻,我的代码有效。它的意思是id我的所有项目都从 0 上升到例如 5。但是,当我删除BikeLocations, 并添加新的BikeLocations. 这些项目的id's 不是从 0 到例如 5,而是从 5 到例如 10。这意味着我不能用 an检索ida的,因为这不会返回 的,而是数组的索引。BikeLocationonClick(DialogInterface dialog, int item)idBikeLocation

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

现在,我的问题是;有什么方法可以将某种BikeLocationid 附加到项目上?

4

2 回答 2

0

不是直接的,对话框只能给你点击项目的位置。您可以根据位置维护自己的 id 查找数组。当您填充您的 arrData(包含位置字符串)时,在其旁边填充一个 arrIds 数组(包含 ID)。

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 中,您可以通过以下方式获取 id:

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

(我不确定它应该是“item”还是“item -1”。我忘记了对话框是否将单击的位置返回为从零开始的位置......)

于 2013-11-14T16:06:30.807 回答
0

如果您将位置声明为最终位置,则可以在 onClick 方法中访问该列表。然后,您可以直接获取 BikeLocation 而不需要位置的 id。

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

        }
于 2013-11-14T16:39:39.007 回答