我想知道我是否可以添加逻辑\区分我的onListItemClick中的视图? 我有一个listFragment,其中有几个视图,并希望执行不同的操作。我试图在我的视图上使用.isPressed()方法但没有成功。
这样做的正确方法是什么。 -谢谢。
根据标记答案的建议,我在CustomArrayAdapter中实现了以下代码,一切运行良好。我有一个ListFragment,它为同一个单元格中的单元格和可单击的imagesViews实现onListItemClick。希望这有助于下一个人。
public class ZAdapter extends ArrayAdapter<HashMap<String, String>>{
protected static final String TAG = "myLog";
Context context;
ArrayList<HashMap<String,String>> myListOfMaps;
public ZAdapter(Context context, int textViewResourceId, ArrayList<HashMap<String, String>> myListOfMaps) {
super(context, textViewResourceId, myListOfMaps);
// TODO Auto-generated constructor stub
this.context=context;
this.myListOfMaps = myListOfMaps;
}
public class MyViewHolder
{
ImageView editImage;
TextView tvTitle;
TextView tvSubTitle;
TextView tvRepEmail;
TextView tvRepCell;
public MyViewHolder(View v)
{
editImage = (ImageView) v.findViewById(R.id.row_icon);
tvTitle = (TextView) v.findViewById(R.id.row_title);
tvSubTitle = (TextView) v.findViewById(R.id.row_subTitle);
tvRepEmail = (TextView) v.findViewById(R.id.tvRepEmail);
tvRepCell = (TextView) v.findViewById(R.id.tvRepCell);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int index=position;
View row = convertView;
MyViewHolder holder = null;
if(row==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row, parent, false);
holder = new MyViewHolder(row);
row.setTag(holder);
}else{
holder = (MyViewHolder) row.getTag();
}
holder.editImage.setImageResource(R.drawable.edit_img);holder.editImage.setTag("goEdit");
holder.tvTitle.setText(myListOfMaps.get(position).get("prod"));
holder.tvSubTitle.setText(myListOfMaps.get(position).get("dist"));
holder.tvRepEmail.setText(myListOfMaps.get(position).get("repEmail"));
holder.tvRepCell.setText(myListOfMaps.get(position).get("repPhone"));
holder.editImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d(TAG, "***************** getView() *********called"+index);
}
});
return row;
}
}
- 谢谢你
答案 0 :(得分:1)
不确定您是否可以在onListItemClick函数中处理它。您可以处理事件点击的一个地方是Adapter类 - getView函数。在此函数中,您可以找到控件并注册事件处理程序。
请注意,您只在此块中设置事件处理程序
if (convertView == null) {
// Find your controls and register event handlers here
}
答案 1 :(得分:0)
在一行中的每个视图上设置点击侦听器的最佳位置是ViewHolder
。在视图持有者构造函数中,为要设置的子视图设置onClickListener
。此外,如果您需要知道该行的id
,则应在id'
类中定义ViewHolder
字段,然后在onClickListener
中使用该字段。不要忘记在getView方法中更新视图ID(或者如果您在CursorAdapter
中使用bindView
)。
答案 2 :(得分:0)
View
方法中的onListItemClick
参数是单击的视图。在您的情况下,它是v
。要采取适当的措施,只需通过获取其ID并在适当时委派来确定它是什么视图。
这是一种可能的结构:
public void onListItemClick(ListView l, View v, int position, long id) {
switch(v.getId()) {
case R.id.row_icon:
// do something
case R.id.row_title:
// do something
case R.id.row_subTitle:
// do something
}
}