2012-04-20 11 views
0

私が作っているゲームの機器画面で作業しています。ユーザーが画像ボタンをクリックするようにしています。このボタンは、在庫データベースから取り込まれたalertDialogを表示します。インベントリデータベースには、フィールド(_id、Desc、Number、EquipSlot)があります。ユーザーが_idの値を取得したいアイテムの1つをクリックすると、Numberを取得できます。そこから、ゲーム内のすべてのアイテムを含むデータベースの番号と相互参照を取得します。そうすれば、どのような統計情報が添付されているかを知ることができます。また、キャラクター情報を保存しているデータベースと、現在装備されている装備を更新できます。私はこの_idを上記のようにする方法を理解できません。以下は私がこれまで持っていたものです。カーソルからAlertDialogが読み込まれます。選択したアイテムからIDを取得する

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

答えて

3

あなたのダイアログからリストビューを引き出した後、注

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


      } 
     }); 

リストビューのアダプタを介して指定された位置にあるアイテムのIDを取得することができます。どうやら

long itemId = lv.getItemIdAtPosition(which); 

が動作します同じもの

long itemId = lv.getAdapter().getItemId(which); 
関連する問題