0

我有一个Listview显示 Facebook 朋友图像和名称的图像。Button右侧的每一行都有一个用于对特定的 Facebook 朋友进行一些操作Button。根据某些条件可以有 3 个背景。这些如下,

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

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

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

我有一些给定的条件来检查朋友是否被邀请。还有调查的事情。附件截图显示了我实际需要的内容。

在此处输入图像描述

我的问题是按钮背景在滚动时会发生变化,因为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;
        }

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

4

3 回答 3

0

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

if(convertView == null)

这可能会有所帮助。

您还应该尝试制作新视图:

View vi = convertView;
if(vi == null) {
    //your code
}
return vi;
于 2013-07-09T09:50:58.683 回答
0

这是视图回收的问题,我也面临同样的问题。通过链接新它解决了我的问题

列表视图中的复选框无法正常工作

于 2013-07-09T10:14:28.697 回答
0

像这样对您的 ListView 使用 Holder:

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;

} 
于 2013-07-09T10:09:35.627 回答