Android内部适配器getView未调用?

时间:2012-08-24 10:07:45

标签: android listview adapter

获取列表大小为46。 我在构造函数中得到了所有的价值。 getView没有调用,

我的代码,

  public class Atom_1_Adapter extends BaseAdapter {

                private Activity activity;
                    List<MsgStandard> msgList1=new ArrayList<MsgStandard>();
                private LayoutInflater inflater=null;
                ImageLoader imageLoader;    
                int size=0;
                String tag="Atom_1_Adapter";

            public Atom_1_Adapter(Activity activity, List<MsgStandard> msgList1) {
                    this.activity = activity;
  this.msgList1 = msgList1
                    size=this.msgList1.size();
                    inflater = (LayoutInflater)this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    imageLoader=new ImageLoader(activity);
                }

        @Override
            public int getCount() {
                return size;
            }

            @Override
            public Object getItem(int position) {
                return position;
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

        class ViewHolder{
                ImageView image1,image2;
        }
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                System.out.println("enter get view--->>>>>>");
                View vi=convertView;
                ViewHolder holder=new ViewHolder();
                try{
                    vi=inflater.inflate(R.layout.homepagelist_1_adapter,null);

        //here my layout declaration


        vi.setTag(holder);

        //here set value for TextView,ImageView... etc

        return vi;

        }catch{}
        }
        }

谢谢,

2 个答案:

答案 0 :(得分:1)

试试这个。

更改构造函数代码。

public Atom_1_Adapter(Activity activity, List<MsgStandard> msgList1) 
{
   this.activity = activity;
   this.msgList1 = msgList1
   size=this.msgList1.size();
   inflater = (LayoutInflater)this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   imageLoader=new ImageLoader(activity);
}

注意: this.msgList1.size()被视为您在Adapter Class中声明的类变量。因此,如果要查找函数中传递的List的大小,则需要在构造函数中删除msgList1.size()前面的 this 。并分配this.msgList1 = msgList1;查看我的代码

public View getView(int position, View convertView, ViewGroup parent) 
{
    ViewHolder holder;

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

        holder.textViewMenuName = (TextView)convertView.findViewById(R.id.textViewMenuName);
        convertView.setTag(holder);
    }
    else 
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.textViewMenuName.setText("Test");
            return convertView;
}

答案 1 :(得分:0)

在你的课堂上你有这个领域:

List<MsgStandard> msgList1=new ArrayList<MsgStandard>();

现在,您的构造函数还采用类型为List的参数,名称相同:msgList1

问题是你在构造函数中调用以下行

size=this.msgList1.size();

关键字this是指当前对象,因此它将引用您的msgList1成员字段,而不是构造函数参数。

由于msgList1成员字段dos还没有任何值,size()将返回0.因此,当调用getCount()方法时,它返回0,并且适配器认为数组中没有元素。

所以,要修复它,在你的构造函数中你应该摆脱这个关键字,并参考构造函数参数:

size=msgList1.size();

此外,您应该在构造函数中再添加一行,并将构造函数中的列表分配给您的类成员:

this.msgList1 = msgList1;
相关问题