位置索引在getView中始终返回0 [英] Position index always return 0 in getView

查看:199
本文介绍了位置索引在getView中始终返回0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现一个ListView,在每行的内部都具有Delete Btn.

i want to implement a ListView which have Delete Btn inside of each row.

我唯一的问题是,当我单击删除某些行的Btn"时,位置0的行刚刚被删除!

My only problem is when i click Delete Btn of some Row, Row with Position 0 just Deleted!

我认为getView中的Position参数无法更新,并且始终为0值

i think somehow my Position parameter in getView cannot be updated and always have 0 value

我该怎么办?!

谢谢.

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
//import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class InvoiceListAdapter extends BaseAdapter {

  ArrayList<Object> _itemList;
  public Activity _context;
  public LayoutInflater _inflater;


  public InvoiceListAdapter(Activity context,ArrayList<Object> itemList)
  {
      super();
      this._context=context;
      this._itemList=itemList;
      this._inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  }
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return _itemList.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return _itemList.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

public static class ViewHolder
{
 TextView ProductName;
 TextView Qnt;
 TextView Price;
 Button Del;

}



@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder holder;
     if(convertView==null)
        {
            holder = new ViewHolder();
            convertView = _inflater.inflate(R.layout.custom_row_view, null);


            holder.ProductName = (TextView) convertView.findViewById(R.id.txt_CRow_ProdName);
            holder.Price = (TextView) convertView.findViewById(R.id.txt_CRow_Price);
            holder.Qnt = (TextView) convertView.findViewById(R.id.txt_CRow_Qnt);
            holder.Del = (Button) convertView.findViewById(R.id.btn_CRow_Delete);
            /*-----------------------------Deleting Item with Button--------------------*/
            holder.Del.setTag(holder);
            holder.Del.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(_context,"Item Deleted!", Toast.LENGTH_SHORT).show();

                    _itemList.remove(position);  
                    notifyDataSetChanged();

                    // TODO Auto-generated method stub

                }
            });

            convertView.setTag(holder);
        }
        else
        {
            holder=(ViewHolder)convertView.getTag();
        }

        AnItem Item = (AnItem) _itemList.get(position);

        holder.ProductName.setText(Item.getProductName());
        holder.Price.setText(Item.getPrice());
        holder.Qnt.setText(Item.getQnt());

        return convertView;


}

推荐答案

 if(convertView==null)
    {
        holder = new ViewHolder();
        convertView = _inflater.inflate(R.layout.custom_row_view, null);


        holder.ProductName = (TextView) convertView.findViewById(R.id.txt_CRow_ProdName);
        holder.Price = (TextView) convertView.findViewById(R.id.txt_CRow_Price);
        holder.Qnt = (TextView) convertView.findViewById(R.id.txt_CRow_Qnt);
        holder.Del = (Button) convertView.findViewById(R.id.btn_CRow_Delete);
        /*-----------------------------Deleting Item with Button--------------------*/
        holder.Del.setTag(holder);


        convertView.setTag(holder);
    }
    else
    {
        holder=(ViewHolder)convertView.getTag();
    }

    AnItem Item = (AnItem) _itemList.get(position);

    holder.ProductName.setText(Item.getProductName());
    holder.Price.setText(Item.getPrice());
    holder.Qnt.setText(Item.getQnt());
    holder.Del.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(_context,"Item Deleted!", Toast.LENGTH_SHORT).show();

                _itemList.remove(position);  
                notifyDataSetChanged();

                // TODO Auto-generated method stub

            }
        });

    return convertView;

我认为onClickListener不在if块内.

I think onClickListener is not be inside the if block.

这篇关于位置索引在getView中始终返回0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆