ListView:无法在单击时更改图像

时间:2014-02-26 13:58:35

标签: android list android-fragments android-fragmentactivity listadapter

我试图在用户点击列表项中的图像后更改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;
}

}

2 个答案:

答案 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
        }
    }
});

尝试一下,让我知道它是否有帮助。