我试图在用户点击列表项中的图像后更改ListFragment中的图像。我必须实现自定义列表适配器,因为我必须在运行时加载图像。单击图像时列表视图图像会发生变化,但是当我滚动列表时,列表视图图像也会更改为同一位置的其他项目。 请协助。
我的适配器代码如下:
public class PeopleAdapter extends BaseAdapter{
private FindPeople activity;
private ArrayList<HashMap<String, String>> data=new ArrayList<HashMap<String,String>>();
private static LayoutInflater inflater=null;
private static boolean imageLoadFinish=false;
private final Object semaphore = new Object();
ImageView thumb_image;
public PeopleAdapter(FindPeople followedActivities, ArrayList<HashMap<String, String>> d) {
// TODO Auto-generated constructor stub
activity = followedActivities;
data.addAll(d);
inflater = (LayoutInflater)activity.getActivity().getLayoutInflater();//getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView( final int position, View convertView, final ViewGroup parent) {
// TODO Auto-generated method stub
Log.d("getView", "getView Entered");
final ViewHolder holder;
imageLoadFinish=false;
View vi=convertView;
if(convertView==null){
convertView = inflater.inflate(R.layout.found_people_row, null); //This should be your row layout
holder = new ViewHolder();
holder.name = (TextView)convertView.findViewById(R.id.Heading); // title
holder.avatar=(ImageView)convertView.findViewById(R.id.TypeIcon); //image
holder.favIcon = (ImageView)convertView.findViewById(R.id.followIcon);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
HashMap<String, String> localhash = new HashMap<String, String>();
localhash = data.get(position);
String currenttitle = localhash.get("Name");
String imagepath = localhash.get("avatar");
holder.name.setText(currenttitle);
if(!imagepath.equals(""))
{
holder.avatar.setImageBitmap(FollowedActivities.memoryCache.get(imagepath));
}
holder.favIcon.setTag(position);
holder.favIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("Tag Position", ""+v.getTag());
holder.favIcon.setImageResource(R.drawable.favorite_512);
}
});
return convertView;
}
static class ViewHolder {
ImageView avatar;
TextView name;
ImageView favIcon;
}
}
答案 0 :(得分:0)
在getView()
更改以下内容
if(!imagepath.equals(""))
{
holder.avatar.setImageBitmap(FollowedActivities.memoryCache.get(imagepath));
}else
{
holder.avatar.setImageBitmap("YOUR DEFAULT IMAGE");
}
答案 1 :(得分:0)
默认情况下保留一个布尔变量并在Model类中将其设置为false(FindPeople - 我猜你从中获取数据)。
然后使用关键字“isClicked”将其添加到您的HashMap;
然后在onClick方法中,在分配favIcon图像之前检查其值,
holder.favIcon.setTag(position);
holder.favIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (Integer) v.getTag(); //This will retrieve your clicked image
HashMap<String, String> localhash = new HashMap<String, String>();
localhash = data.get(position);
if(!localhash.get("isClicked")){
holder.favIcon.setImageResource(R.drawable.favorite_512);
}else{
//The image was already clicked and changed
}
}
});
尝试一下,让我知道它是否有帮助。