Android 通过在适配器的getView()中单击imageView来更改图像

Android 通过在适配器的getView()中单击imageView来更改图像,android,android-listview,android-imageview,android-adapter,Android,Android Listview,Android Imageview,Android Adapter,目标:我想要的是,每当我单击列表项中的图像时,它都会进行更改 数据库 TextView(随着喜欢次数的增加) 更改图像本身以表示喜欢的列表项 错误:但每当我单击图像时,它都会在数据库中进行更改,并增加相应文本视图的计数 But it change images of other list items as well than of just clicked item. 请使用以下代码帮助我: public class PopularTabRowAdapter extends BaseAdapt

目标:我想要的是,每当我单击列表项中的图像时,它都会进行更改

  • 数据库
  • TextView(随着喜欢次数的增加)
  • 更改图像本身以表示喜欢的列表项
  • 错误:但每当我单击图像时,它都会在数据库中进行更改,并增加相应文本视图的计数

    But it change images of other list items as well than of just clicked item.
    
    请使用以下代码帮助我:

    public class PopularTabRowAdapter extends BaseAdapter {
    
    List<APIDataModel> videoList;
    private Activity activity;
    private static LayoutInflater inflater = null;
    ImageLoader imageloader;
    PopularDataSource datasource;
    int pos;
    ViewHolder holder;
    ListView mListView;
    
    public PopularTabRowAdapter(Activity activity,
            List<APIDataModel> videoList, ListView list) {
        this.activity = activity;
        this.videoList = videoList;
        inflater = (LayoutInflater) this.activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageloader = new ImageLoader(activity);
        mListView = list;
        this.datasource = new PopularDataSource(activity);
    }
    
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return videoList.size();
    }
    
    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return videoList.get(arg0);
    }
    
    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return videoList.get(arg0).getID();
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View row = convertView;
        holder = null;
        pos = position;
        if (row == null) {
            row = inflater.inflate(R.layout.popular_tab_custum_row, parent,
                    false);
            holder = new ViewHolder();
            holder.descriptiontxt = (TextView) row
                    .findViewById(R.id.decription_popCustomRow);
            holder.listtxt = (TextView) row
                    .findViewById(R.id.list_popCustomRow);
            holder.imageView = (ImageView) row
                    .findViewById(R.id.image_popCustomRow);
            holder.likeImage = (ImageView) row
                    .findViewById(R.id.likimage_popCustRow);
            holder.likeImage.setOnClickListener(likeImageListner);
    
            holder.numbLike = (TextView) row
                    .findViewById(R.id.noLik_popCustRow);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }
    
        holder.descriptiontxt.setText(videoList.get(position).getDecription());
        holder.listtxt.setText(videoList.get(position).getList());
        imageloader.DisplayImage(ApplicationMain
                .getYouTubeVideoImageURL(videoList.get(position).getURL()),
                holder.imageView);
        holder.numbLike.setText(String.valueOf(videoList.get(position)
                .getNumberOfLikes()));
        if (videoList.get(position).getLikeStatus() == 1) {
            holder.likeImage.setImageResource(R.drawable.like_done);
        }
        return row;
    }
    
    OnClickListener likeImageListner = new OnClickListener() {
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            ViewHolder vh = getViewHolder(v);
            int positionVh = mListView.getPositionForView((View) v.getParent());
    
            if (isNetworkAvailable()) {
                Toast.makeText(activity, positionVh + "", Toast.LENGTH_LONG)
                        .show();
                if (videoList.get(positionVh).getLikeStatus() == 0) {
                    HitLike like = new HitLike(positionVh, vh.likeImage,
                            vh.numbLike);
                    like.execute();
                }
            }
        }
    };
    
    public ViewHolder getViewHolder(View v) {
        if (v.getTag() == null) {
            return getViewHolder((View) v.getParent());
        }
        return (ViewHolder) v.getTag();
    }
    
    class HitLike extends AsyncTask<Void, Void, String> {
        ImageView image;
        int position;
        TextView text;
    
        public HitLike(int position, ImageView image, TextView text) {
            this.position = position;
            this.image = image;
            this.text = text;
        }
    
        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            activity.setProgressBarIndeterminateVisibility(true);
        }
    
        @Override
        protected String doInBackground(Void... params) {
            // TODO Auto-generated method stub
            ServiceHandler sh = new ServiceHandler();
            String responce = sh.makeServiceCall(
                    ApplicationMain.Instance.getPOPLikeAPI(),
                    ServiceHandler.POST);
            Log.i("PopularRowAdapterResponce", responce);
            return responce;
        }
    
        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            activity.setProgressBarIndeterminateVisibility(false);
            datasource.open();
            if (datasource.addLike(videoList.get(position).getID(), videoList
                    .get(position).getNumberOfLikes())) {
                APIDataModel model = new APIDataModel(videoList.get(position)
                        .getList(), videoList.get(position).getDecription(),
                        videoList.get(position).getURL());
                model.setNumberOfLikes(videoList.get(position)
                        .getNumberOfLikes() + 1);
                model.setLikeStatus(1);
                videoList.set(position, model);
                notifyDataSetChanged();
                image.setImageResource(R.drawable.like_done);
            }
            datasource.close();
        }
    }
    
    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) activity
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
    
    static class ViewHolder {
        TextView descriptiontxt;
        TextView listtxt;
        ImageView imageView;
        ImageView likeImage;
        TextView numbLike;
    }
    
    }
    
    公共类PopulartBrowAdapter扩展了BaseAdapter{
    列表视频列表;
    私人活动;
    专用静态充气机=空;
    图像加载器;
    大众数据源数据源;
    int pos;
    视窗座;
    列表视图;
    公共大众浏览器适配器(活动,
    列表(视频列表、列表视图列表){
    这个。活动=活动;
    this.videoList=视频列表;
    充气器=(充气器)此活动
    .getSystemService(上下文布局\充气机\服务);
    imageloader=新的imageloader(活动);
    mListView=列表;
    this.datasource=新的PopularDataSource(活动);
    }
    @凌驾
    public int getCount(){
    //TODO自动生成的方法存根
    返回videoList.size();
    }
    @凌驾
    公共对象getItem(int arg0){
    //TODO自动生成的方法存根
    返回videoList.get(arg0);
    }
    @凌驾
    公共长getItemId(int arg0){
    //TODO自动生成的方法存根
    返回videoList.get(arg0.getID();
    }
    @凌驾
    公共视图getView(int位置、视图转换视图、视图组父视图){
    //TODO自动生成的方法存根
    视图行=转换视图;
    holder=null;
    pos=位置;
    if(行==null){
    行=充气机。充气(R.layout.popular\u选项卡\u custum\u行,父级,
    假);
    holder=新的ViewHolder();
    holder.DescriptionText=(TextView)行
    .findViewById(R.id.说明);
    holder.listtxt=(TextView)行
    .findViewById(R.id.list\u popCustomRow);
    holder.imageView=(imageView)行
    .findViewById(R.id.image\u PoputCustomRow);
    holder.likeImage=(ImageView)行
    .findviewbyd(R.id.likimage_popCustRow);
    holder.likeImage.setOnClickListener(likeImageListner);
    holder.numbLike=(TextView)行
    .findViewById(R.id.noLik_popCustRow);
    row.setTag(支架);
    }否则{
    holder=(ViewHolder)row.getTag();
    }
    holder.descriptionText.setText(videoList.get(position.getDescription());
    holder.listtxt.setText(videoList.get(position.getList());
    imageloader.DisplayImage(ApplicationMain
    .getYouTubeVideoImageURL(videoList.get(position).getURL()),
    支架(图像视图);
    holder.numbLike.setText(String.valueOf(videoList.get)(位置)
    .getNumberOfLikes());
    if(videoList.get(position.getLikeStatus()==1){
    holder.likeImage.setImageResource(R.drawable.like_done);
    }
    返回行;
    }
    OnClickListener likeImageListner=新的OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    //TODO自动生成的方法存根
    ViewHolder vh=获取ViewHolder(v);
    int positionVh=mListView.getPositionForView((视图)v.getParent());
    if(isNetworkAvailable()){
    Toast.makeText(活动,位置vh+“”,Toast.LENGTH\u LONG)
    .show();
    if(videoList.get(positionVh.getLikeStatus()==0){
    HitLike=新HitLike(位置vh,vh.likeImage,
    vh.麻木状);
    like.execute();
    }
    }
    }
    };
    公共视图持有者getViewHolder(视图v){
    if(v.getTag()==null){
    返回getViewHolder((视图)v.getParent());
    }
    return(ViewHolder)v.getTag();
    }
    类HitLike扩展异步任务{
    图像视图图像;
    内部位置;
    文本查看文本;
    公共HitLike(int位置、ImageView图像、TextView文本){
    这个位置=位置;
    这个图像=图像;
    this.text=文本;
    }
    @凌驾
    受保护的void onPreExecute(){
    //TODO自动生成的方法存根
    super.onPreExecute();
    activity.SetProgressBarInDeterminateVibility(真);
    }
    @凌驾
    受保护字符串doInBackground(无效…参数){
    //TODO自动生成的方法存根
    ServiceHandler sh=新的ServiceHandler();
    String response=sh.makeServiceCall(
    ApplicationMain.Instance.getPOPLikeAPI(),
    ServiceHandler.POST);
    Log.i(“PopularRowadapterResponse”,response);
    返回响应;
    }
    @凌驾
    受保护的void onPostExecute(字符串结果){
    //TODO自动生成的方法存根
    super.onPostExecute(结果);
    activity.SetProgressBarInDeterminateVibility(假);
    datasource.open();
    if(datasource.addLike(videoList.get(position).getID(),videoList
    .get(position.getNumberOfLikes()){
    APIDataModel=新的APIDataModel(videoList.get(position)
    .getList(),videoList.get(位置).getDecription(),
    videoList.get(position.getURL());
    model.setNumberOfLikes(videoList.get(位置)
    .getNumberOfLikes()+1);
    模型:setLikeStatus(1);
    视频列表。设置(位置、型号);
    notifyDataSetChanged();
    setImageResource(R.drawable.like_done);
    }
    datasource.close();
    }
    }
    专用布尔值isNetworkAvailable(){
    ConnectivityManager ConnectivityManager=(ConnectivityManager)活动
    .getSystemService(Context.CONNECTIVITY\u服务);
    NetworkInfo activeNetworkInfo=connectivityManager
    .getActiveNetworkInfo();
    返回activeNetworkInfo!=null&&activeNetworkInfo.isConnected();
    }
    静态类视窗夹{
    文本视图描述文本;
    文本视图列表;
    图像视图图像视图;
    ImageView-likeImage;
    文本六
    
    image.setImageResource(R.drawable.like_done);
    
       image.setImageResource(R.drawable.like_done);
    
       image.setImageResource(R.drawable.default);