1

我做了一些搜索,这个论坛上的问题似乎都与我的不匹配。

我要完成的工作:
我的应用程序中有一个列表视图。当我选择和项目时,我希望应用程序能够读取该项目是什么并相应地执行我希望它执行的操作。
我正在制作的 App 是一款基于文本的 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 金币,还会减去胸甲、护腿等上的金币……

所以我的问题是:
如何让应用程序单独读取一行并将其与所选字符串进行比较?我还尝试了:“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似乎是正确的方法。

请参阅getItemAtPositionsetOnItemSelectedListener的文档

于 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 回答