无条件的布局,从通胀来看适配器:如果使用View持有人模式通胀、持有人、适配器、布局

2023-09-05 08:34:44 作者:表面

我收到以下在eclipse警告:

I am getting following warning in eclipse:

Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrolling.

convertView = vi.inflate(R.layout.activity_friend_list_row, parent, false);

我有一个复选框一个基础适配器实现,我添加了一个标签,使复选框的工作。

I have a base adapter with a checkbox implemented and I have added a tag to make the check box work.

下面是code:

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

    ViewHolder mViewHolder;
    mViewHolder = new ViewHolder();
    LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = vi.inflate(R.layout.activity_friend_list_row, parent, false);

    mViewHolder.cb = (CheckBox) convertView.findViewById(R.id.checkBox);

    convertView.setTag(mViewHolder);

    if (InviteFriends.isChecked[position] == true)
    {
        mViewHolder.cb.setChecked(true);
    }
    else
    {
        mViewHolder.cb.setChecked(false);
    }

    mViewHolder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean ischecked) 
        {
            if (buttonView.isChecked())
            {
                InviteFriends.isChecked[position] = true;

            }
            else
            {
                InviteFriends.isChecked[position] = false;
            }
        }
    });

    TextView friendsname  = (TextView) convertView.findViewById(R.id.friendsName); // title
    ImageView thumb_image = (ImageView) convertView.findViewById(R.id.list_image); // thumb image

    HashMap<String, String> song = new HashMap<String, String>();
    song = data.get(position);

    // Setting all values in listview
    friendsname.setText(song.get(InviteFriends.KEY_DISPLAY_NAME));
    imageLoader.DisplayImage(song.get(InviteFriends.KEY_IMAGEPROFILE_URL), thumb_image);


    return convertView;
}

结果都上来了正常。如何解决这样的警告?我不能够得到一个解决方案了吗?

The results are coming up properly. How do I fix this warning? I am not able to get a solution for this yet?

谢谢!

推荐答案

试试这个

static class ViewHolder {

 private  TextView friendsname;
 private ImageView thumb_image;
 private CheckBox cb;

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

 ViewHolder mViewHolder = null;
 HashMap<String, String> song =null;

 if(convertView == null){

   song = new HashMap<String, String>();
   mViewHolder = new ViewHolder();

  LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  convertView = vi.inflate(R.layout.activity_friend_list_row, parent, false);
  mViewHolder.friendsname  = (TextView) convertView.findViewById(R.id.friendsName); // title
  mViewHolder.thumb_image = (ImageView) convertView.findViewById(R.id.list_image); // thumb image


  mViewHolder.cb = (CheckBox) convertView.findViewById(R.id.checkBox);

  convertView.setTag(mViewHolder);
  mViewHolder.cb.setTag(data.get(position));


  mViewHolder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() 
  {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean ischecked) 
    {

          InviteFriends.isChecked[position] = buttonView.isChecked();

    }
  });


}else{

  mViewHolder =   (ViewHolder) convertView.getTag();

}

 song =  mViewHolder.cb.getTag();


 mViewHolder.friendsname.setText(song.get(InviteFriends.KEY_DISPLAY_NAME));
 mViewHolder.imageLoader.DisplayImage(song.get(InviteFriends.KEY_IMAGEPROFILE_URL), thumb_image);
 mViewHolder.cb.setChecked(InviteFriends.isChecked[position]);

 return convertView;
}