setOnItemClickListener返回第一个元素

时间:2015-01-30 10:32:02

标签: android listview

我有一个由ArrayList填充的ListView。当我在视图中单击LV的元素时,应用程序将启动一个新的Activity。 但是,如果我点击列表视图的第二个或第三个元素,就好像我按下了第一个元素。这是一些代码:

RipartitoriRepo repo = new RipartitoriRepo(this);
        my_list = repo.getRipartitoriByIdUnitàAbitativa(IdUnitàAbitativa);
        if(my_list.size()!=0){

            my_listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id){
                    Intent intent = new Intent(MainActivity.this, NextActivity.class);

                    TextView my_textview = (TextView)findViewById(R.id.IdElementCell);
                    String myId = my_textview.getText().toString();
                    intent.putExtra("IdElement", myId);

                    startActivity(intent);
                }
            });
            SimpleAdapter adapter;
            adapter = new SimpleAdapter(MainActivity.this, my_list, R.layout.ripartitori_row, new String[]{"idripartitore","posizione", "matricola", "altezza", "larghezza"},
                    new int[]{R.id.IdRipartitore_cell,R.id.ripart_posizione, R.id.ripart_matricola, R.id.rip_altezza, R.id.rip_larghezza});

            my_listview.setAdapter(adapter);
        }

这就是细胞:

<?xml version="1.0" encoding="utf-8"?>
<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/IdElement_cell"/>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rip_testo1"
            android:text="Posizione:"
            android:textStyle="bold"
            android:textSize="20dp"
            android:layout_marginLeft="5dp"

            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/rip_testo1"
            android:text="xxx"
            android:textSize="20dp"

            android:layout_marginLeft="3dp"
            android:id="@+id/ripart_posizione"/>

        </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:textSize="20dp"
            android:textStyle="bold"
            android:text="Matricola:"
            android:id="@+id/rip_testo4"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ripart_matricola"
            android:layout_toRightOf="@id/rip_testo4"
            android:text="xxx"
            android:textSize="20dp"
            android:layout_marginLeft="3dp"
            />
        </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rip_testo2"
            android:text="Altezza:"
            android:layout_marginLeft="8dp"
            android:textSize="17dp"
            android:textStyle="bold"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="3dp"
            android:text="xxx"
            android:layout_toRightOf="@+id/rip_testo2"
            android:textSize="17dp"
            android:id="@+id/rip_altezza"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/rip_altezza"
            android:text="Larghezza:"
            android:layout_marginLeft="10dp"
            android:textSize="17dp"
            android:textStyle="bold"
            android:id="@+id/rip_testo3"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rip_larghezza"
            android:layout_toRightOf="@id/rip_testo3"
            android:text="xxx"
            android:textSize="17dp"
            android:layout_marginLeft="3dp"/>

        </RelativeLayout>

</LinearLayout>

例如:如果第一个元素有Id = 00001而第二个元素有Id = 0002,当我点击列表视图时,setOnItemClickListener方法就好像我总是点击第一个元素一样。所以my_textview将始终为00001

4 个答案:

答案 0 :(得分:2)

我无法在你的xml中找到R.id.IdElementCell

但我的猜测是,你必须这样做

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
    ...

    TextView my_textview = (TextView)view.findViewById(R.id.IdElementCell);
    String myId = my_textview.getText().toString();

    ...
}

修改

您试图在您的活动中找到ID为R.id.IdElementCell的观点。 由于这是一个listItem的一部分视图,它有多个实例,并将返回使用此id找到的第一个视图。

通过在单击的视图上调用findViewById函数,我们将搜索限制在此单击视图中的子视图。因此,我们得到了正确的观点。

答案 1 :(得分:0)

你可以做到

intent.putExtra("IdElement", position);

startActivity(intent);

<强>更新

 TextView my_textview = (TextView)findViewById(R.id.IdElementCell);
 String myId = my_textview.getText().toString();
 my_textview.setTag("myId", myId);
 intent.putExtra("IdElement", my_textview.getTag("myId"));
 startActivity(intent);

答案 2 :(得分:0)

你应该通过:

intent.putExtra("IdElement", id); // OR position, if you don't care about ID's

不是

intent.putExtra("IdElement", myId);

答案 3 :(得分:0)

您要通过以下代码在列表视图中声明文本视图

TextView my_textview = (TextView)findViewById(R.id.IdElementCell);
String myId = my_textview.getText().toString();
intent.putExtra("IdElement", myId); 

并将此ID发送到您的下一个活动,无论您点击哪个位置,您总是会传递带有ID IdElementCell 的textview ID,这就是为什么您总是检索相同的ID,您从未发送过不同的ID来获取发生点击事件的位置,您可以按位置检索它,或者setOnItemClickListener()中的参数 long id 将为您提供项目的行ID点击了。