0

Button以下是我的每个单元格上的 a 的一些 XML ListView

android:onClick="buttonTouched"

这就是我的 ListActivity 上所说的:

public void buttonTouched(View v) 
{
    // how do I get the "position" of the cell this view is on?
}

如何获取position被触摸的按钮的单元格?

4

3 回答 3

0

在您的适配器中试试这个:

@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
    View row = convertView;
    YourWrapper wrapper = null;

    if (row == null)
    {
        row = inflater.inflate(R.layout.layout, parent, false);
        wrapper = new YourWrapper (row);
        row.setTag(wrapper);
    }
    else
        wrapper = (YourWrapper) row.getTag();

    wrapper.getButton().setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            // What you want
        }
    });

    return row;
}
于 2012-11-15T06:10:22.707 回答
0

由于我在同一行上有许多按钮,因此我最终只是将适配器中的标签设置为所需的位置,然后在按钮触摸时获取标签:

public void imageClick(View v) 
{
    int position = (Integer) v.getTag();
}

我走这条路的原因是因为我需要在 ListActivity 中完成单击以访问我需要的一些不在适配器中的数据。

于 2012-11-15T06:20:28.130 回答
0

请看一下:OnItemClickListener。实现示例:自定义 ListView 上的 setOnItemClickListener

由于您在列表视图的每一行中有 3 个按钮,并且您有 3 个不同的实现,因此还有另一种方法可以做到这一点。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    if(null == convertView){
        holder = new ViewHolder();
        convertView = inflater.inflate(LAYOUT_RESOURCE, null);
        holder.btn1 = (Button) convertView.findViewById(R.id.btn1);
        holder.btn2 = (Button) convertView.findViewById(R.id.btn2);
        holder.btn3 = (Button) convertView.findViewById(R.id.btn3);
        //setting tag to reduce hierarchy lookup
        convertView.setTag(holder);
    } else {
        //getting tag to obtain the already found views
        holder = (ViewHolder) convertView.getTag();
    }
    //Updating fields
    holder.btn1.setOnClickListener(commonListener); 
    holder.btn2.setOnClickListener(commonListener); 
    holder.btn3.setOnClickListener(commonListener); 
    //returning the populated view
    return convertView;
}

OnClickListener commonListener = new OnClickListener(){

    @Override
        public void onClick(View v) {
            switch(v.getId()){
                case R.id.btn1:
                //do your work
                break;
            case R.id.btn2:
                //do your work
                break;
                case R.id.btn3:
                //do your work
                break;
                default:
                break;
            }
        }
    }); 
/**
 * Holder class to improve performance. Helps in reducing the lookup for
 * views.
 * 
 */
private static class ViewHolder {

    Button btn1;
    Button btn2;
    Button btn3;
}

希望这可以帮助。

于 2012-11-15T08:19:04.260 回答