【问题标题】:item images get mixed after listview scrolls down列表视图向下滚动后项目图像混合
【发布时间】:2017-05-22 07:45:04
【问题描述】:

我有一个显示用户联系人列表的活动。如果我的应用中存在联系人,我想显示一个关注按钮,否则我想显示一个 whatsapp 和电报图标来邀请他们。

当我打开活动时,一切都如我所愿,但是当我向下滚动并返回跟随按钮时,不同联系人的应用程序图标会混合在一起!有关注按钮的用户可能会看到whatsapp图标或其他人可能会看到关注按钮! 每次我向下和向上滚动时位置都会改变!

我应该说所有联系人姓名和手机号码都是固定且正确的!只是图像混合在一起!

我知道问题出在我的 getView 函数上,但不知道如何解决它:( 我该如何解决? tnx :)

这是我所有的适配器代码:

public class LazyAdapterContactsList extends BaseAdapter {

private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;

public ImageLoader profileImageLoader;
HashMap<String, String> song;
public LazyAdapterContactsList(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;

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

    profileImageLoader=new ImageLoader(activity.getApplicationContext());
}

public int getCount() {
    return data.size();
}

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

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

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    ViewHolder holder = null;
    if(vi==null) {
        vi = inflater.inflate(R.layout.contacts_list_row, null);
        holder = new ViewHolder();


        holder.listID = (TextView) vi.findViewById(R.id.MyContactslistIDPosition);
        holder.name = (TextView) vi.findViewById(R.id.MyContactslistName); 
        holder.mobile = (TextView) vi.findViewById(R.id.MyContactslistMobileNumber);
        holder.whatsAppIcon = (ImageView) vi.findViewById(R.id.MyContactsListWhatsApp);
        holder.telegramIcon = (ImageView) vi.findViewById(R.id.MyContactsListTelegram);
        holder.followBtn = (Button) vi.findViewById(R.id.MyContactsListFollowBtn);
        holder.linearLayout = (LinearLayout) vi.findViewById(R.id.MyContactsthumbnail);

        holder.profile_thumb_image = (ImageView) vi.findViewById(R.id.MyContactslist_image_profilephoto);




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



    song = data.get(position);

    // Setting all values in listview
    holder.listID.setText(song.get(MyContacts.KEY_ID));
    holder.name.setText(song.get(MyContacts.KEY_NAME));
    holder.mobile.setText(song.get(MyContacts.KEY_MOBILE));


if (song.get(MyContacts.KEY_USER_EXISTS).equals("1")) 
{


       if (song.get(MyContacts.KEY_THUMB_PROFILE_URL).equals("no")) {

        } else {
            profileImageLoader.DisplayImage(song.get(MyContacts.KEY_THUMB_PROFILE_URL), holder.profile_thumb_image);
        }


        }else {

            holder.linearLayout.setVisibility(View.VISIBLE);
            holder.followBtn.setVisibility(View.GONE);
        }


    return vi;
}

public static class ViewHolder {
    public TextView textView ,listID ,name,mobile;
    public ImageView whatsAppIcon ,telegramIcon;
    public Button followBtn;
    public LinearLayout linearLayout;
    public ImageView profile_thumb_image;
}
}

【问题讨论】:

    标签: android listview listadapter


    【解决方案1】:

    无论您在 (if) 条件下对 ListView 的任何视图(如 HIDEVISIBLE强>(其他)。

    试试这个解决方案,只需按以下方式更改代码:

       if (song.get(MyContacts.KEY_USER_EXISTS).equals("1"))
        {
            holder.linearLayout.setVisibility(View.GONE);
            holder.followBtn.setVisibility(View.VISIBLE);
            if (song.get(MyContacts.KEY_THUMB_PROFILE_URL).equals("no")) {
    
            } else {
                profileImageLoader.DisplayImage(song.get(MyContacts.KEY_THUMB_PROFILE_URL), holder.profile_thumb_image);
            }
    
    
        }else {
    
            holder.linearLayout.setVisibility(View.VISIBLE);
            holder.followBtn.setVisibility(View.GONE);
        }
    

    【讨论】:

    • tnx 此更改修复了图标的问题 :) 但此代码仍然存在问题:
    • profileImageLoader.DisplayImage(song.get(MyContacts.KEY_THUMB_PROFILE_URL), holder.profile_thumb_image);
    • 它从服务器下载联系人图像。但是滚动后联系人头像还是混在一起的!
    • 我添加了一张照片。你能检查一下吗?
    • 没问题,把默认图片设置成holder.profile_thumb_image试试吧。
    【解决方案2】:

    简单的答案是,使用浮动按钮。按钮位置不变,不会觉得烦

    【讨论】:

    • 不,我有一些类似 instagram 关注按钮的东西。如果用户被关注,我不需要再次显示按钮,我让它不可见。
    • 您想为列表页面或单个行显示一个常见的关注按钮吗?
    • 对于个人行,(尚未关注的联系人)。我正确显示它,但滚动后它们混合在一起,一些用户没有关注按钮,反之亦然。
    • 将使用上下文点击监听器添加到关注按钮,在点击方法中使其不可见。还有一件事,您应该为每个用户设置首选项以检查用户是否已被关注。否则,您将无法跟踪哪些用户关注了哪些用户,哪些用户没有关注。使用 SQLLITE 或 Sharedpreference
    • 我是从服务器获取的,没有问题。我添加了一张关于个人资料照片会发生什么的照片,你可以看看吗? tnx.
    【解决方案3】:

    您的视图被系统重用/回收 - 因此您必须每次在 getView 中(重新)设置profile_thumb_image

    如果没有,您可能会获得一个回收视图,其中图像是在之前的 getView 调用中设置的。

    【讨论】:

      【解决方案4】:

      首先不要将此变量设为全局变量

      HashMap歌曲;

      如果可能的话,把它放到你的 getView() 方法中。

      正如@coyer 所说的

      您的视图被系统重复使用/回收 - 因此您必须每次在 getView 中(重新)设置 profile_thumb_image

      希望对您有所帮助...如果您有任何问题可以提出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        • 2019-06-15
        • 2021-10-22
        • 1970-01-01
        • 2019-04-01
        • 2018-08-13
        相关资源
        最近更新 更多