1

いくつか検索しましたが、このフォーラムの質問はどれも私のものと一致しないようです。

私が達成しようとしていること:
アプリ にリスト ビューがあります。アイテムを選択すると、アプリがそのアイテムが何であるかを読み取り、それに応じてやりたいことを実行できるようにしたいと考えています。
私が作っているアプリは、テキストベースの RPG ゲームです。たとえば、ショップに入ると、リスト ビュー内に 100 ゴールドの「ブロンズ ヘルメット」が表示されます。ブロンズ ヘルメットをクリックしたときに、「ユーザーがブロンズ ヘルメットをクリックした場合、そのユーザーのお金から 100 ゴールドを引いて、彼にヘルメットを渡すことができます」と理解できるようにしたいと考えています。

私が試したこと:

if (MeleeArmourList.getItemAtPosition(1).toString() == "(100G) Bronze Helmet") {
                int gold Integer.parseInt(textViewShopGoldValue1.getText().toString()) - 100;
                textViewShopGoldValue1.setText("" + gold);
            }

これで完璧に動作します。しかし、何が起こっているかを示すために、さらに数行のコードを示します。

if (MeleeArmourList.getItemAtPosition(2).toString() == "(250G) Bronze Chestplate") {
                int gold = Integer.parseInt(textViewShopGoldValue1.getText().toString()) - 250;
                textViewShopGoldValue1.setText("" + gold);
            }
if (MeleeArmourList.getItemAtPosition(3).toString() == "(125G) Bronze Leggings") {
                int gold = Integer.parseInt(textViewShopGoldValue1.getText().toString()) - 125;
                textViewShopGoldValue1.setText("" + gold);
            }
if (MeleeArmourList.getItemAtPosition(4).toString() == "(100G) Bronze Boots") {
                int gold = Integer.parseInt(textViewShopGoldValue1.getText().toString()) - 100;
                textViewShopGoldValue1.setText("" + gold);
            }

「ブロンズ ヘルメット」をクリックすると、ヘルメットから 100 ゴールドだけでなく、チェストプレート、レギンスなどからもゴールドが差し引かれます...

私の質問は次のとおりです:
アプリに1行だけを個別に読み取らせ、選択した文字列と比較させるにはどうすればよいですか? 「getSelectedItem()」も試しましたが、nullPointerException が発生します。

何か案は?

編集

MeleeArmourList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

            if (MeleeArmourList.getSelectedItemPosition() == 1) {
                int gold = Integer.parseInt(textViewShopGoldValue1
                        .getText().toString()) - 100;
                textViewShopGoldValue1.setText("" + gold);
            }
        }

    });
4

3 に答える 3

1

int渡される引数はonItemClick()クリックされたリストアイテムの位置であるため、それを取得するために他のメソッドを呼び出す必要はありません。

私があなたの目標を正しく理解していれば、次のようなものを使用できます。

MeleeArmourList.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position,
            long item_id) {

        switch(position) {
        case 1:
            // (100G) Bronze Helmet
            int gold = Integer.parseInt(textViewShopGoldValue1.getText().toString()) - 100;
            textViewShopGoldValue1.setText("" + gold);
            break;
        case 2:
            // (250G) Bronze Chestplate
            ...
            break;
        }
        ...
    }

});
于 2012-11-13T04:12:43.080 に答える
0

getItemAtPosition選択されたかどうかに関係なく、その位置に関連付けられたアイテムを返します。

アイテムが選択されたときのコールバックを設定したいようです: setOnItemSelectedListenerそのための正しい方法のようです。

getItemAtPositionおよびsetOnItemSelectedListenerのドキュメントを参照してください

于 2012-11-13T02:49:47.297 に答える
0
if (MeleeArmourList.getItemAtPosition(1).toString() == "(100G) Bronze Helmet"){
}

== 演算子を使用して文字列の内容を比較しています

equals() 演算子で試してください

if ("(100G) Bronze Helmet".equals(MeleeArmourList.getItemAtPosition(1).toString() )){
}

また

 if (MeleeArmourList.getItemAtPosition(1).toString().equals("(100G) Bronze Helmet"))
       {

        }

このコードを使用して、選択したアイテムの位置を確認できます

listView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    Toast.makeText(getApplicationContext(),
      "Click ListItem Number " + position, Toast.LENGTH_LONG)
      .show();
  }
}); 
于 2012-11-13T03:36:29.703 に答える