maebe
maebe

Reputation: 553

AlertDialog populated from cursor. Get ID from the selected Item

I'm working on an equipment screen for a game I'm making. I'm having the user click an image button. This button brings up a alertDialog that is populated from an inventory database. Inventory database has the fields (_id, Desc, Number, EquipSlot). When the user clicks one of the items I want to get the value of _id, so I can then get Number. From there I will take number and cross reference my database containing all items in the game. That way I can figure out what stats are attached to it as well as update my database that stores character information as well as what equipment is currently worn. I can't figure out how to get this _id to finish the above. Below is what I have so far.

 @Override
    protected Dialog onCreateDialog(final int id) {

      switch (id) {
      case DIALOG_MELEE_ID:
          buildDialog();
        break;
      case DIALOG_RANGE_ID:
          buildDialog();
        break;
     ...
      default:
          dialog = null;
              }
      return dialog;
    }

  @Override
    protected void onPrepareDialog(final int id, final Dialog dialog) {
      switch (id) {
      case DIALOG_MELEE_ID:
          pullInventoryCursor(1);
        break;
      case DIALOG_RANGE_ID:
          pullInventoryCursor(2);
        break;
     ...
      }
    }

    public void equipSlot1(View v){
        showDialog(DIALOG_MELEE_ID);
    }

    private void buildDialog(){
        int selectedItem = -1; //somehow get your previously selected choice
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Select Weapon").setCancelable(true);
        builder.setSingleChoiceItems(inventory, selectedItem, "Desc", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                //get _id and update dbs as needed.
                dialog.dismiss();


            }
        });

        dialog = builder.create();
    }

    private void pullInventoryCursor(int equipSlot){
        if (slot == 1){
        inventory = mydbhelper.getInventory1(equipSlot);}
        else if (slot == 2){
            // TODO setup database and dbhelper for character slot 2
            inventory = mydbhelper.getInventory1(equipSlot);
        }
        startManagingCursor(inventory);
    }

Upvotes: 0

Views: 1333

Answers (1)

dymmeh
dymmeh

Reputation: 22306

You can pull the listview from your dialog and then retrieve the id for an item at the given position through the listview's adapter

builder.setSingleChoiceItems(inventory, selectedItem, "Desc", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                ListView lv = dialog.getListView();
                long itemId = lv.getAdapter().getItemId(which);

                //do whatever you need with the ID in the DB

                dialog.dismiss();


            }
        });

Note: apparently

long itemId = lv.getItemIdAtPosition(which);

will work the same as

long itemId = lv.getAdapter().getItemId(which);

Upvotes: 3

Related Questions