我有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;
}
我在这里给出的条件只是为了简化。
答案 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它解决了我的问题