0

ListviewFacebook の友達の画像と名前を表示するがあります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 に答える