请帮忙。
正如我在标题中所述,我试图让List适配器的一行中的各个元素根据用户点击的内容启动不同的操作。
它“有点”有效,但它需要很长时间才能对用户点击作出反应。我做错了什么?
提前致谢,
所以我在
中尝试了以下代码 @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// Get the item that was clicked
Cursor c = (Cursor) this.getListAdapter().getItem(position);
// c.moveToNext();
prescription_id = c.getString(0);
TextView pName = (TextView) v.findViewById(R.id.text2);
TextView paName = (TextView) v.findViewById(R.id.text3);
TextView rDateLabel = (TextView) v.findViewById(R.id.textView1);
TextView rDate = (TextView) v.findViewById(R.id.text4);
TextView rLeftLabel = (TextView) v.findViewById(R.id.text5);
TextView rLeft = (TextView) v.findViewById(R.id.text6);
ImageView callPhone = (ImageView) v.findViewById(R.id.Call_Pharmacy);
pName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
goToPDetails();
}
});
pa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
goToPDetails();
}
});
rDateLabel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
goToPDetails();
}
});
rDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
goToPDetails();
}
});
rLeftLabel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
goToPDetails();
}
});
rLeft.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
goToPDetails();
}
});
callPhone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Some Code
}
});
}
答案 0 :(得分:1)
所有那些onClick侦听器(一个ListView元素的单个子视图上的那些)可能不应该在onListItemClick方法中,而是在适配器的getView方法中(正确使用convertView参数)。 / p>
你这样做的方式似乎非常错误,如果你在正确的地方正确实现各种onClick监听器,你甚至可能不需要你的onListItemClick方法。
答案 1 :(得分:1)
在此处使用基于xml的列表项布局是关键。使用两个属性android:clickable="true"
和android:onClick="<your click handler>"
设置每个可单独点击的视图,该方法需要使用此签名实现:public void <your click handler> (View v) {...}
在您的活动中。需要注意的是,您必须做出设计决策来实现点击处理程序以重叠处理(对于多个View单击一个hanlder)或每个View的单个视图处理程序,前者最适合点击时基本相似在功能上,后者在它们不同时。
下一步是实现点击处理程序,此处的关键是使用ListView.getPositionForView(View v),以便您可以关联行,数据和单击的视图。
不要忘记实现ListActivity.onListItemClick()作为点击列表项的根布局的全部内容,并作为没有自己的onClick
处理程序的视图的全能集。
上述技术将具有良好的性能,并使用多个Android API来加速您的开发。
如果您决定在代码中实现侦听器,请仔细研究getView()
(如darma所述)并且为了提高性能(如果列表中有多个项目),请重复使用上述讨论的点击监听器关于如何关联数据和行。