ListItem ImageChangeing在android中无法正常工作

ListItem ImageChangeing在android中无法正常工作,android,android-listview,android-arrayadapter,listitem,notifydatasetchanged,Android,Android Listview,Android Arrayadapter,Listitem,Notifydatasetchanged,我有一个列表视图,我有一个为它设计的自定义列表项,有一些文本视图,还有一个图像视图。我想在单击时更改该特定图像。我已经尝试过了,但是当我从列表视图中单击该图像时,下面列表项的图像正在更改 例如,如果我单击第0个位置的图像,则图像会更改第一个位置列表,当我上下滚动列表时,图像会随机更改 我不知道它发生了什么,我在适配器上使用了notifydatasetChanged,但它不工作,我的代码如下 请帮帮我,谢谢 代码 private class RssAdapter extends ArrayAda

我有一个
列表视图
,我有一个为它设计的自定义列表项,有一些
文本视图
,还有一个
图像视图
。我想在单击时更改该特定图像。我已经尝试过了,但是当我从
列表视图
中单击该图像时,下面列表项的图像正在更改

例如,如果我单击第0个位置的图像,则图像会更改第一个位置列表,当我上下滚动列表时,图像会随机更改

我不知道它发生了什么,我在适配器上使用了notifydatasetChanged,但它不工作,我的代码如下

请帮帮我,谢谢

代码

 private class RssAdapter extends ArrayAdapter<RSSFeed_SelectedHotelResult> {
        private List<RSSFeed_SelectedHotelResult> rssFeedLst;
        int selectedPosition;

        public RssAdapter(Context context, int textViewResourceId,
                List<RSSFeed_SelectedHotelResult> rssFeedLst) {
            super(context, textViewResourceId, rssFeedLst);
            this.rssFeedLst = rssFeedLst;
            Boolean addtoShotlist;
        }

        public View getView(final int position, View convertView,
                ViewGroup parent) {

            View view = convertView;

            if (convertView == null) {
                view = View.inflate(HotelListActivity.this, R.layout.list_row,
                        null);

                rssHolder = new RssHolder();
                rssHolder.iv_add = (ImageView) view.findViewById(R.id.iv_add);
                rssHolder.rssTitleView = (TextView) view
                        .findViewById(R.id.title);
                rssHolder.tv_offer = (TextView) view.findViewById(R.id.tv_ofr);
                rssHolder.rssImagHotel = (ImageView) view
                        .findViewById(R.id.hotelImage);
                rssHolder.rssImageHotelRate = (ImageView) view
                        .findViewById(R.id.rateHotel2);
                rssHolder.rssHotelPrice = (TextView) view
                        .findViewById(R.id.textHotelRate);
                rssHolder.rssHotelAddress = (TextView) view
                        .findViewById(R.id.textHotelDesc);
                // rssHolder.adres = (TextView) view.findViewById(R.id.adres);
                // rssHolder.rssHotelRating = (TextView)
                // view.findViewById(R.id.textHotelRating);
                rssHolder.rating_hotel = (RatingBar) view
                        .findViewById(R.id.rateHotelImage);
                rssHolder.tv_currcode = (TextView) view
                        .findViewById(R.id.tv_currcode);

                view.setTag(rssHolder);

            } else {
                rssHolder = (RssHolder) view.getTag();

            }

            final RSSFeed_SelectedHotelResult rssFeed = rssFeedLst
                    .get(position);

            rssHolder.rssTitleView.setText(rssFeed.getName());
            imageLoader.DisplayImage(rssFeed.getHotel_image(),
                    rssHolder.rssImagHotel);
            imageLoader.DisplayImage_rating(rssFeed.getHote_rate_image(),
                    rssHolder.rssImageHotelRate);

            rssHolder.rssHotelPrice.setText(rssFeed.getHotel_price());

            rssHolder.rssHotelAddress.setText(rssFeed.getHotel_desc());
            rssHolder.rating_hotel.setRating(Float.valueOf(rssFeed
                    .getHotel_rate()));
            rssHolder.tv_currcode.setText(Consts.currencyCode);
            if (rssFeed.getoffer() != null) {
                rssHolder.tv_offer.setText("**" + rssFeed.getoffer() + "**");
            } else {
                rssHolder.tv_offer.setText("");
            }

            rssHolder.iv_add.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    selectedPosition = position;
                    try {

                        if (position == selectedPosition) {

                            rssHolder.iv_add
                                    .setBackgroundResource(R.drawable.fill);

                        } else {

                            rssHolder.iv_add
                                    .setBackgroundResource(R.drawable.plus12);
                        }

                    } catch (IndexOutOfBoundsException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();

                    }
                    System.out
                            .println("::::::::::::My data in side hotel List activity:::::::::;"
                                    + position
                                    + ""
                                    + rssFeed.getName()
                                    + "\n"
                                    + rssFeed.getHotel_price());

                    /*
                     * RSSFeed_SelectedHotelResult rssFeed1 = rssFeedLst
                     * .get(position);
                     */

                }
            });

            return view;
        }
    }
私有类RssAdapter扩展了ArrayAdapter{
私有列表rssFeedLst;
int-selectedPosition;
公共RssAdapter(上下文,int textViewResourceId,
列表rssFeedLst){
super(上下文、textViewResourceId、rssFeedLst);
this.rssFeedLst=rssFeedLst;
布尔addtoShotlist;
}
公共视图getView(最终整型位置,视图转换视图,
视图组(父级){
视图=转换视图;
if(convertView==null){
视图=视图。充气(hotellistativity.this,R.layout.list\u行,
无效);
rssHolder=新的rssHolder();
rssHolder.iv_add=(ImageView)view.findViewById(R.id.iv_add);
rssHolder.rssTitleView=(文本视图)视图
.findviewbyd(R.id.title);
rssHolder.tv_offer=(TextView)view.findviewbyd(R.id.tv_of R);
rssHolder.rssImagHotel=(图像视图)视图
.findViewById(R.id.hotelImage);
rssHolder.rssImageHotelRate=(图像视图)视图
.FindViewbyd(R.id.rateHotel2);
rssHolder.rssHotelPrice=(文本视图)视图
.findViewById(R.id.textHotelRate);
rssHolder.rssHotelAddress=(文本视图)视图
.findViewById(R.id.textHotelDesc);
//rssHolder.adres=(TextView)view.findViewById(R.id.adres);
//rssHolder.rssHotelRating=(文本视图)
//view.findViewById(R.id.textHotelRating);
rssHolder.rating_酒店=(RatingBar)视图
.findViewById(R.id.rateHotelImage);
rssHolder.tv_currcode=(文本视图)视图
.findviewbyd(R.id.tv\U代码);
view.setTag(rssHolder);
}否则{
rssHolder=(rssHolder)view.getTag();
}
最终RSSFeed\u选择的酒店结果RSSFeed=rssFeedLst
.获得(职位);
rssHolder.rssTitleView.setText(rssFeed.getName());
imageLoader.DisplayImage(rssFeed.getHotel_image(),
rssHolder.rssImagHotel);
imageLoader.DisplayImage\u rating(rssFeed.getHote\u rate\u image(),
rssHolder.rssImageHotelRate);
rssHolder.rssHotelPrice.setText(rssFeed.getHotel_price());
rssHolder.rssHotelAddress.setText(rssFeed.getHotel_desc());
rssHolder.rating_hotel.setRating(浮动值)(rssFeed
.getHotel_rate());
rssHolder.tv_currcode.setText(conss.currcycode);
if(rssFeed.getoffer()!=null){
rssHolder.tv_offer.setText(“**”+rssFeed.getoffer()+“**”);
}否则{
rssHolder.tv_offer.setText(“”);
}
rssHolder.iv_add.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
selectedPosition=位置;
试一试{
如果(位置==selectedPosition){
rssHolder.iv_添加
.setBackgroundResource(R.可提取填充);
}否则{
rssHolder.iv_添加
.挫折资源(R.drawable.plus12);
}
}catch(IndexOutOfBoundsException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
系统输出
.println(“::::我的数据在侧边酒店列表活动中::::;”
+位置
+ ""
+rssFeed.getName()
+“\n”
+rssFeed.getHotel_price();
/*
*RSSFeed\u选择的酒店结果rssFeed1=rssFeedLst
*.获得(职位);
*/
}
});
返回视图;
}
}
1.)在自定义适配器getView中编写以下代码:

if (position == selectedPosition) {

            imageview.setBackgroundResource(R.drawable.image1);

        } else {

            imageview.setBackgroundResource(R.drawable.normal);
        } 
2.)在自定义适配器中创建一个方法:

public void setSelected(int position) {
        selectedPosition = position;
    }

//where selectPosition is private int selectedPosition = -1;
3.)从活动列表项调用此方法,单击类似:

   ((Category_Adapter) adapter).setSelected(position);
            listview.invalidate();
  • 确保listview设置为单选模式

  • 对于notify data set CHANGE,调用错误的方法时,正确的方法是
    适配器。NOTIFYDATASETCHANGE()

    私有类RssAdapter扩展ArrayAdapter{
    私有列表rssFeedLst;
    private int selectedPosition=-1;//初始化位置
    公共RssAdapter(上下文,int textViewResourceId,
    列表rssFeedLst){
    super(上下文、textViewResourceId、rssFeedLst);
    this.rssFeedLst=rssFeedLst;
    布尔addtoShotlist;
    }
    //做这个方法
    公共职位(国际职位){
    selectedPosition=位置;
    }
    公共视图getView(最终整型位置,
    
    private class RssAdapter extends ArrayAdapter<RSSFeed_SelectedHotelResult> {
            private List<RSSFeed_SelectedHotelResult> rssFeedLst;
           private int selectedPosition =-1;// initalize position
    
            public RssAdapter(Context context, int textViewResourceId,
                    List<RSSFeed_SelectedHotelResult> rssFeedLst) {
                super(context, textViewResourceId, rssFeedLst);
                this.rssFeedLst = rssFeedLst;
                Boolean addtoShotlist;
            }
    //make this method
    public void setSelected(int position) {
            selectedPosition = position;
        }
            public View getView(final int position, View convertView,
                    ViewGroup parent) {
    
                View view = convertView;
    
                if (convertView == null) {
                    view = View.inflate(HotelListActivity.this, R.layout.list_row,
                            null);
    
                    rssHolder = new RssHolder();
                    rssHolder.iv_add = (ImageView) view.findViewById(R.id.iv_add);
                    rssHolder.rssTitleView = (TextView) view
                            .findViewById(R.id.title);
                    rssHolder.tv_offer = (TextView) view.findViewById(R.id.tv_ofr);
                    rssHolder.rssImagHotel = (ImageView) view
                            .findViewById(R.id.hotelImage);
                    rssHolder.rssImageHotelRate = (ImageView) view
                            .findViewById(R.id.rateHotel2);
                    rssHolder.rssHotelPrice = (TextView) view
                            .findViewById(R.id.textHotelRate);
                    rssHolder.rssHotelAddress = (TextView) view
                            .findViewById(R.id.textHotelDesc);
                    // rssHolder.adres = (TextView) view.findViewById(R.id.adres);
                    // rssHolder.rssHotelRating = (TextView)
                    // view.findViewById(R.id.textHotelRating);
                    rssHolder.rating_hotel = (RatingBar) view
                            .findViewById(R.id.rateHotelImage);
                    rssHolder.tv_currcode = (TextView) view
                            .findViewById(R.id.tv_currcode);
    
                    view.setTag(rssHolder);
    
                } else {
                    rssHolder = (RssHolder) view.getTag();
    
                }
    
                final RSSFeed_SelectedHotelResult rssFeed = rssFeedLst
                        .get(position);
    
                rssHolder.rssTitleView.setText(rssFeed.getName());
                imageLoader.DisplayImage(rssFeed.getHotel_image(),
                        rssHolder.rssImagHotel);
                imageLoader.DisplayImage_rating(rssFeed.getHote_rate_image(),
                        rssHolder.rssImageHotelRate);
    
                rssHolder.rssHotelPrice.setText(rssFeed.getHotel_price());
    
                rssHolder.rssHotelAddress.setText(rssFeed.getHotel_desc());
                rssHolder.rating_hotel.setRating(Float.valueOf(rssFeed
                        .getHotel_rate()));
                rssHolder.tv_currcode.setText(Consts.currencyCode);
                if (rssFeed.getoffer() != null) {
                    rssHolder.tv_offer.setText("**" + rssFeed.getoffer() + "**");
                } else {
                    rssHolder.tv_offer.setText("");
                }
    
                rssHolder.iv_add.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                       //remove selectposition = position
    
                        try {
    
                            if (position == selectedPosition) {
    
                                rssHolder.iv_add
                                        .setBackgroundResource(R.drawable.fill);
    
                            } else {
    
                                rssHolder.iv_add
                                        .setBackgroundResource(R.drawable.plus12);
                            }
    
                        } catch (IndexOutOfBoundsException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
    
                        }
                        System.out
                                .println("::::::::::::My data in side hotel List activity:::::::::;"
                                        + position
                                        + ""
                                        + rssFeed.getName()
                                        + "\n"
                                        + rssFeed.getHotel_price());
    
                        /*
                         * RSSFeed_SelectedHotelResult rssFeed1 = rssFeedLst
                         * .get(position);
                         */
    
                    }
                });
    
                return view;
            }
        }