在ListView中,为什么要不断获取第一行而不是所选行的值?

时间:2019-04-16 03:57:49

标签: android

在我的android应用中,我有以下代码:

public void goToCaptureBonus (View View) {
        String tappedBonus = ((TextView) findViewById(R.id.bonusListCode)).getText().toString();
        Log.e(TAG,"goToCaptureBonus, tapped bonus = " + tappedBonus);
        Intent goToCaptureBonus = new Intent(this,captureBonus.class);
        goToCaptureBonus.putExtra("codeTapped",tappedBonus);
        startActivity(goToCaptureBonus);
    }

每当我点击一行时,日志总是显示第一行(在这种情况下为AK1)。我知道ListView正在制作一行,并重复它;但是每一行的值都可以正确显示。为什么上面的代码总是返回第一行,而不是返回被窃取的行中的值?

2 个答案:

答案 0 :(得分:1)

documentation of findViewById()

  

查找具有给定ID的第一个子代视图...

您是否有可能在活动或常规列表视图的上下文中而不是在选定的(点击的)视图中使用findViewById()

如果在视图上点击了函数的view参数,则可能应该这样做:

view.findViewById(R.id.bonusListCode)

不只是

findViewById(R.id.bonusListCode)

答案 1 :(得分:1)

如果使用ListView,则应使用OnItemClickListener。这是一个示例如何执行此操作。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //use the position variable to get the list item from the list
        String selection = itemsArray[position]; // this will give the selected item 
    }
});

现在,只要轻按ListView上的某个项目,就会调用方法onItemClick()。在这里您可以获得选择。