2017-05-22 97 views
0

我有一个活动来显示用户联系人列表。如果我的应用程序中存在联系人,我想显示一个按钮,否则我想显示一个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; 
} 
} 

回答

3

任何行动你喜欢状况HIDEVISIBLE的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); 
    } 
+0

tnx此更改修复了图标的问题:)但此代码仍存在问题: – Saeid

+0

profileImageLoader.DisplayImage(song.get(MyContacts.KEY_THUMB_PROFILE_URL),holder.profile_thumb_image); – Saeid

+0

它从服务器下载联系人图像。但仍然滚动后的联系人个人资料照片与海誓山盟混合! – Saeid

0

简单的答案是,使用浮动按钮。按钮的位置将保持不变,并且您不会感到恼火

+0

不,我有一些像Instagram的按钮按钮。如果用户被跟踪,我不需要再次显示按钮,并使其不可见。 – Saeid

+0

你想为列表页面还是单行显示一个共同的按钮? –

+0

为个别行,(未跟踪的联系人)。我正确地显示它,但滚动后,他们混合和一些用户有按钮将不会有,反之亦然。 – Saeid

0

您将查看从系统中重用/回收 - 因此您必须在getView中每次都(重新)设置profile_thumb_image

如果没有,则有可能获得一个循环视图,其中的图像是在之前的getView调用中设置的。

0

首先不要让这个变量全球

HashMap的歌曲;

如果可能使其成为final,请将其带入您的getView()方法。

由于@coyer告诉

您查看得到重用/从系统回收 - 所以你必须(重新)设置profile_thumb_image在getView每次

希望这有助于ü...如果U可以有任何疑问问

相关问题