我有一个由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
。
答案 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点击了。