Reputation: 553
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
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