2014-12-22 53 views
1

我有一个扩展Fragment的类。我有一个ListView。当我点击一个项目时,它总是返回相同的项目。 这里是ListView适配器的row.xml。setOnItemClickListener在片段上不起作用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:id="@+id/IdItem"/> 
</LinearLayout> 

这里事件:

myListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
        myTextView = (TextView)getActivity().findViewById(R.id.IdItem); 
        String IdItem = myTextView.getText().toString(); 
        Intent intent = new Intent(getActivity(), NextActivity.class); 
        intent.putExtra("IdItem", IdItem); 

        startActivity(intent); 
       } 
      }); 

它总是返回相同的IdItem,而不是已选定的一个。

回答

1

更改此:

myTextView = (TextView)getActivity().findViewById(R.id.IdItem); 

此:

myTextView = view.findViewById(R.id.IdItem); 

ListView的行对象,以节省内存被重用,所以你需要使用视图对象在被发送ListView的onItemClick方法。这个View对象表示ListView中实际单击的行,包含当前的子视图和值。

+0

这不是答案。启动线程和所有其他用户可能有相同的问题应该学习的东西,而不是复制粘贴东西.. – Mike

+2

你可能是对的,答案可以解释一点点,我会遵循你的建议,不过,它是仍然回答,并帮助解决他的问题。也许大多数人会很快理解为什么会发生这种变化。 – hmartinezd

+0

是的大多数人,但不是全部,为什么研究一个回答,以了解什么修复了这个问题。如果你知道我的意思,为什么不简单地提供信息来阻止用户进行双重研究,如果答案已经在这里。现在,它是一个回答,删除downvote! – Mike