在Android中滚动时Listview按钮背景问题

时间:2013-07-09 09:41:38

标签: android listview

我有Listview显示Facebook好友图片和名称。右侧每一行都有一个Button与该特定的Facebook好友进行一些操作。Button可以根据某些条件具有3个背景。这些是跟随,

1.如果未邀请该朋友,请将按钮背景设置为“Background1.png”。

2.如果邀请了该朋友,请将按钮背景设置为“background2.png”。

3.如果该朋友已完成调查,请将按钮背景设置为“background3.png”。

我有一些给定条件可以检查朋友是否被邀请。也适用于调查事项。附带的屏幕截图显示了我实际需要的内容。

enter image description here

我的问题是滚动时按钮背景更改为Listview重新使用位置。我无法使用常规视图显示Facebook好友的数量不同而且会显示内存问题。 以下是我到目前为止所尝试的内容。请指导我如何实现这一目标。

代码:

@Override
        public View getView(int position, View convertView,
                ViewGroup parent) {
            View vi = convertView;
            if (convertView == null)
                vi = mInflater.inflate(R.layout.category_listview, null);

            Facebook_FriendImage=(SmartImageView)vi.findViewById(R.id.category_image);
            Facebook_FriendName = (TextView) vi.findViewById(R.id.category_name);
            invite = (Button) vi.findViewById(R.id.invite);

            invite.setTag(position);

            if (position==2 || position==3) {
                 invite.setBackgroundResource(R.drawable.background1);
             } 
             else if (position==5 || position==8) {
                 invite.setBackgroundResource(R.drawable.background2);
             }
             else {
                 invite.setBackgroundResource(R.drawable.background3);
             }
            //Snippet for loading FB Friend Image
               int loader = R.drawable.no_image;
               Facebook_FriendImage.setScaleType(ImageView.ScaleType.FIT_XY);
               Facebook_FriendImage.setImageUrl(GlobalClass.FACEBOOK_FRIEND_IMAGE_URL.get(position), loader);


             //Snippet for Loading FB Friend Name  
             String unicode=new String(GlobalClass.FACEBOOK_FRIEND_NAME.get(position));
          Typeface font= Typeface.createFromAsset(getAssets(), "NotoSans-Bold.ttf");
          Facebook_FriendName.setTypeface(font); 
          Facebook_FriendName.setText(unicode);  

            return vi;
        }

我在这里给出的条件只是为了简化。

3 个答案:

答案 0 :(得分:0)

解决方案可能是这样的: 只删除条件。

if(convertView == null)

可能会有所帮助。

您还应尝试制作新视图:

View vi = convertView;
if(vi == null) {
    //your code
}
return vi;

答案 1 :(得分:0)

将List持有人用于ListView:

public View getView(int position, View convertView,
                ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null){
                convertView = mInflater.inflate(R.layout.category_listview, null);
                holder = new ViewHolder();
                holder.Facebook_FriendImage=(SmartImageView)convertView.findViewById(R.id.category_image);
                holder.Facebook_FriendName = (TextView) convertView.findViewById(R.id.category_name);
                holder.invite = (Button) convertView.findViewById(R.id.invite);
                invite.setTag(position);
                convertView.setTag(holder);
            }
            else {
                holder = (ViewHolder)convertView.getTag();
            }
            if (position==2 || position==3) {
                 holder.invite.setBackgroundResource(R.drawable.background1);
             } 
             else if (position==5 || position==8) {
                 holder.invite.setBackgroundResource(R.drawable.background2);
             }
             else {
                 holder.invite.setBackgroundResource(R.drawable.background3);
             }
            //Snippet for loading FB Friend Image
               int loader = R.drawable.no_image;
               holder.Facebook_FriendImage.setScaleType(ImageView.ScaleType.FIT_XY);
        holder.Facebook_FriendImage.setImageUrl(GlobalClass.FACEBOOK_FRIEND_IMAGE_URL.get(position), loader);
             //Snippet for Loading FB Friend Name  
             String unicode=new String(GlobalClass.FACEBOOK_FRIEND_NAME.get(position));
          Typeface font= Typeface.createFromAsset(getAssets(), "NotoSans-Bold.ttf");
          holder.Facebook_FriendName.setTypeface(font); 
          holder.Facebook_FriendName.setText(unicode);  

            return convertView;
        }

并且ViewHolder类应该是这样的:

class ViewHolder{
    SmartImageView Facebook_FriendImage;
    TextView Facebook_FriendName;
    Button invite;

} 

答案 2 :(得分:0)

这是视图回收的问题我也遇到了同样的问题。通过链接nelow它解决了我的问题

check box in listview not working properly