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();
对于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;
}
}