获取OnItemClick ListView中项目的值

13

我试图在自定义适配器的ListView上获取选中Item的值,我使用以下代码尝试:

public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    View curr = parent.getChildAt((int) id);
                    TextView c = (TextView)curr.findViewById(R.id.tvPopUpItem);
                    String playerChanged = c.getText().toString();

                    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show();

                }

一开始,如果我点击,数值是正确的,但是一旦我滚动并且点击另一个项目,我得到的是那个被点击项目的错误值...有什么想法是什么原因导致这个问题?

4个回答

50

参数v表示当前行,因此使用:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    TextView c = (TextView) v.findViewById(R.id.tvPopUpItem);
    String playerChanged = c.getText().toString();

    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show();
}

(或者您可以使用getChildAt(position)但这会更慢。)

了解您可能根据布局进一步简化此操作。


谢谢,这个可以工作!你知道为什么getChildAt的位置没有起作用吗?我也尝试过这个,但是这也给了我错误… - Matthias Vanb
1
根据您的适配器,id 可能指的是完全不同的索引。例如,CursorAdapters 在 id 中返回表的主键。另一方面,position 应该始终指的是行数。 - Sam

0

只需要小改动

TextView c = (TextView) v.findViewById(R.id.tvPopUpItem);

由于您正在使用自定义视图,因此需要在OnItemClickListener中传递View参数,然后使用该值获取其中的TextViews的详细信息。


1
下次留言时,请勿发布额外的回答。 - sparticvs

0

我没有太多经验,但我认为如果你想从一个OnClcik(它是一个匿名类)传递一个变量到OnClcik之外和其他的活动中,你需要通过Intent intent.putExtra...来传递它(这很容易) 否则你可能会使用“public static”变量,但这可能会导致内存泄漏...


0
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent i=new Intent(ListOfAstrologers.this,AstroProForUser.class);
                i.putExtra("hello",adapter.getItem(position).getUsername() );
                startActivity(i);
            }
        });

这里的username是在一个类中声明的字符串字段,你必须在适配器类中重写getItem()方法,以获取当你点击时充气行的详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接