单击列表视图中的按钮后获取位置

时间:2010-11-20 19:39:21

标签: android

我在我的适配器中有这个:

public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder;
        if(convertView==null)   
        {
            convertView = myInflater.inflate(R.layout.list, null);          
            holder = new ViewHolder();
            holder.text01 = (TextView) convertView.findViewById(R.id.Text01); 
            ((Button)convertView.findViewById(R.id.ListButonPlus)).setOnClickListener(this);
            convertView.setTag(holder);
        }else
        {
            holder = (ViewHolder) convertView.getTag();         
        }   
            return convertView;
        }

那:

public void onClick(View v) 
{
    Toast.makeText(v.getContext(), "pouette",1000).show();
}

我尝试获取包含我的按钮的项目的位置。

如何将getView方法中的位置变量传递给onClick方法? 我将在我的视图(项目视图)中有几个按钮

谢谢

2 个答案:

答案 0 :(得分:1)

好的,我发现,我将我的位置传递给ViewHolder
我通过递归函数从视图或parrent视图的标记中获取ViewHolder 有什么不同的方法吗?

public static class ViewHolder
    {
        private TextView text01;
        public int position;
    }
    public ViewHolder getViewHolder(View v)
    {
        if(v.getTag() == null)
        {
            return getViewHolder((View)v.getParent());
        }
        return (ViewHolder)v.getTag();
    }
    public void onClick(View v) {

        ViewHolder vh = getViewHolder(v);
                vh.position // Here I get position
       }

答案 1 :(得分:0)

我知道这篇文章很老,但这可以帮助其他人:

在我的adapeter的getView中:

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

        final ContactRow ContactRow = ContactRowList.get(position);

        if(row == null)
        {

         ...
         holder.delete = (ImageButton)row.findViewById(R.id.btn_contact_delete); // my button inside the item

            holder.delete.setTag(position);
         ...
        }

这是我对这个按钮的倾听者

holder.delete.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v){

                int position=(Integer)v.getTag();
                    ((MainActivity)context).deleteContact(position,true);   // call the delete function form the main activity
            }
        });

我的持有人

static class ContactHolder
{
    ...
    ImageButton delete; 
}