有关ListView自定义行布局项的onClick()事件的帮助

时间:2010-11-15 06:37:26

标签: android android-listview

我有一个ListView,其行由我格式化。每行都有ImageView和TextView的混合。 我也实现了自己的适配器,并能够通过它绘制每一行。

现在,我想要这样的东西 -

  • 用户点击ImageView(不是该行上的任何其他位置,但只有此ImageView才能响应点击次数)
  • 我知道了点击ImageView的行的位置。

我为此尝试了很多东西,并希望我的代码尽可能高效(就过度杀伤而言)。 目前我只能捕获特定ImageView上的click事件,但我不知道单击了哪一行。

我在Row XML中提供了一个属性,如下所示 -

<ImageView android:id="@+id/user_image"
    android:padding="5dip" 
    android:layout_height="60dip" 
    android:layout_width="60dip"
    android:clickable="true"
    android:onClick="uImgClickHandler"/> 

在我的代码中,我有一个这样的方法:

public void uImgClickHandler(View v){
  Log.d("IMG CLICKED", ""+v.getId());
  LinearLayout parentRow = (LinearLayout)v.getParent();

 }

我可以得到父行(也许),但我不确定如何从这里走得更远。 有人可以帮忙吗?

4 个答案:

答案 0 :(得分:14)

请参考,
我只是编写代码来给你提供想法,格式不正确

 class youaddaper extends BaseAdapter{

   public View getView(int position, View convertView, ViewGroup parent){
        LayoutInflater inflate = LayoutInflater.from(context);
        View v = inflate.inflate(id, parent, false);

      ImageView imageview = (ImageView) v.findViewById(R.id.imageView);
        imageview.setOnClickListener(new imageViewClickListener(position));
      //you can pass what ever to this class you want,
      //i mean, you can use array(postion) as per the logic you need to implement 
   }
   class imageViewClickListener implements OnClickListener {
   int position;
    public imageViewClickListener( int pos)
        {
            this.position = pos;
        }

    public void onClick(View v) {
      {// you can write the code what happens for the that click and 
       // you will get the selected row index in position
     }
}

}

希望它能帮到你

答案 1 :(得分:1)

另一种选择是使用视图的方法setTag()getTag()。你可以在getView中设置它:

imageView.setTag(new Integer(position));

然后在onClick()中,您可以通过以下方式找到标记:

Integer tag = v.getTag();

然后,这将用于将图像视图与列表视图项的位置相关联。

请注意,如果列表视图可能会丢失中间的项目,这种方法会产生问题,因此项目位置会在列表视图的生命周期内发生变化。

答案 2 :(得分:0)

你可以这样做: 在我们的适配器的getview方法中 按钮btn1 =(按钮)convertView.findViewById(R.id.btn1); btn1.setOnClickListener(mActivity);

您还可以在活动中处理onclick事件, 对于活动的上下文,mActivity只是在适配器的构造中传递它并将其转换为活动之类的   MyActivity mActivity =(MyActivity)上下文; 在适配器中。 感谢名单

答案 3 :(得分:0)

这似乎适用于ListActivity,其项目布局包含带有android:onClick =“editImage”的ImageView:

public void editImage(View v) {
        int[] loc = new int[2];
        v.getLocationInWindow(loc);
        int pos = getListView().pointToPosition(loc[0], loc[1]);
        Cursor c = (Cursor) adapter.getItem(pos);
        // c now points at the data row corresponding to the clicked row
}