我创建了一个自定义列表视图。在列表视图中,每个组件都有其点击事件,如添加到书签图像,当前位置图像,距离位置图像等。
在书签图像中,例如假设我的屏幕上有10行可见,如果我点击第4行项目书签图像,那么有时它会更改上面或下面的书签图像。我在这里发布我的基本适配器代码。
提前谢谢。
基础适配器
public class OffersBaseAdapter extends BaseAdapter {
Context context;
LayoutInflater mInflater;
OffersInformation offerList = new OffersInformation();
private MessageData msgData;
//String OfferId;
public OffersBaseAdapter(Context context, OffersInformation offerList) {
this.context = context;
this.offerList = offerList;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return offerList.offersInfo.size();
}
@Override
public Object getItem(int position) {
// return offerList.offersInfo.get(position);
return position;
}
@Override
public long getItemId(int position) {
// return offerList.offersInfo.indexOf(offerList.offersInfo.get(position));
return position;
}
public class ViewHolder {
TextView tv_HeaderOffer, tv_OfferDescr, tv_PostedBy, tv_Distance, tv_RemainingDays;
ImageView img_AddtoWishBag, img_storeLocation, img_storeDirection, img_storeImage, img_vertical, img_horizontal;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
try {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_item_offers, null);
holder.tv_HeaderOffer = (TextView) convertView.findViewById(R.id.tvC_ProdcutOffer);
holder.tv_OfferDescr = (TextView) convertView.findViewById(R.id.tvC_ProductDescription);
holder.tv_PostedBy = (TextView) convertView.findViewById(R.id.tvC_PostedBy);
holder.tv_RemainingDays = (TextView) convertView.findViewById(R.id.tvC_remaingTime);
holder.tv_Distance = (TextView) convertView.findViewById(R.id.tvC_distace);
holder.img_vertical = (ImageView) convertView.findViewById(R.id.ivC_Vertical);
holder.img_horizontal = (ImageView) convertView.findViewById(R.id.ivC_Horizonal);
holder.img_AddtoWishBag = (ImageView) convertView.findViewById(R.id.ivC_addToWishBag);
holder.img_storeImage = (ImageView) convertView.findViewById(R.id.ivC_Logo);
holder.img_storeDirection = (ImageView) convertView.findViewById(R.id.ivC_mapView);
holder.img_storeLocation = (ImageView) convertView.findViewById(R.id.ivC_Location);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.img_AddtoWishBag.setTag(position);
List<String> items = Arrays.asList(offerList.offersInfo.get(position).st_logo.split("\\s*,\\s*"));
if (position == 0)
if (position % 2 == 0) {
holder.img_horizontal.setBackgroundColor(Color.parseColor("#019CD5"));
holder.img_vertical.setBackgroundColor(Color.parseColor("#019CD5"));
} else {
holder.img_horizontal.setBackgroundColor(Color.parseColor("#0A7B9B"));
holder.img_vertical.setBackgroundColor(Color.parseColor("#0A7B9B"));
}
holder.tv_HeaderOffer.setText(offerList.offersInfo.get(position).of_title);
holder.tv_PostedBy.setText("Posted By : " + offerList.offersInfo.get(position).st_name);
holder.tv_OfferDescr.setText(offerList.offersInfo.get(position).of_desc);
String KM = String.format("%.02f", offerList.offersInfo.get(position).distance * 1.609344);
holder.tv_Distance.setText(KM + " KM");
holder.tv_RemainingDays.setText(offerList.offersInfo.get(position).of_end);
holder.img_storeLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent reDirectMap = new Intent(context, AndroidGoogleMapsActivity.class);
reDirectMap.putExtra("Latitude", offerList.offersInfo.get(position).st_lat);
reDirectMap.putExtra("Longitude", offerList.offersInfo.get(position).st_lng);
context.startActivity(reDirectMap);
}
});
if (!offerList.offersInfo.get(position).st_logo.equalsIgnoreCase("") || !offerList.offersInfo.get(position).st_logo.equals("no")) {
Picasso.with(context)
.load(AppWSConstants.IMG_UPLOAD_OFFER_URL + items.get(0))
.into(holder.img_storeImage);
} else {
// holder.img_storeImage.setBackgroundResource(R.drawable.home_icon);
}
if (offerList.offersInfo.get(position).is_wishbag.equalsIgnoreCase("Y")) {
holder.img_AddtoWishBag.setImageResource(R.mipmap.ic_removefromwishbag);
} else {
holder.img_AddtoWishBag.setImageResource(R.drawable.ic_addtowishbag);
}
final ViewHolder finalHolder = holder;
holder.img_AddtoWishBag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (offerList.offersInfo.get(position).is_wishbag.equalsIgnoreCase("N")) {
RequestParams params = new RequestParams();
params.put("loginid", AppGlobal.getFromUserDefaults(context, AppConstants.KEY_UID));
params.put("offerid", offerList.offersInfo.get(position).of_id);
AsyncHttpClient mClient = new AsyncHttpClient();
mClient.setTimeout(6 * 1000);
mClient.post(AppWSConstants.WS_ADDTO_WISHBAG, params, new AddRemoveOfferWishBag(finalHolder.img_AddtoWishBag, true));
notifyDataSetChanged();
} else if (offerList.offersInfo.get(position).is_wishbag.equalsIgnoreCase("Y")) {
RequestParams params = new RequestParams();
params.put("loginid", AppGlobal.getFromUserDefaults(context, AppConstants.KEY_UID));
params.put("offerid", offerList.offersInfo.get(position).of_id);
AsyncHttpClient mClient = new AsyncHttpClient();
mClient.setTimeout(6 * 1000);
mClient.post(AppWSConstants.WS_REMOVEFROM_WISHBAG, params, new AddRemoveOfferWishBag(finalHolder.img_AddtoWishBag, false));
notifyDataSetChanged();
}
}
});
return convertView;
} catch (Exception ex) {
Log.i("LogInfo->", ex.getMessage());
}
return convertView;
}
public class AddRemoveOfferWishBag extends AsyncHttpResponseHandler {
ImageView ivWishBag;
boolean isAddWishtoBag;
public AddRemoveOfferWishBag(ImageView ivWishBag, boolean isAddWishtoBag) {
this.ivWishBag = ivWishBag;
this.isAddWishtoBag = isAddWishtoBag;
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onFinish() {
super.onFinish();
}
@Override
public void onSuccess(String content) {
super.onSuccess(content);
msgData = new MessageData();
Gson gson = new Gson();
Type infoType = new TypeToken<MessageData>() {
}.getType();
msgData = gson.fromJson(content, infoType);
if (msgData.messageInfo.status == 1) {
if (isAddWishtoBag) {
ivWishBag.setImageResource(R.mipmap.ic_removefromwishbag);
} else {
ivWishBag.setImageResource(R.drawable.ic_addtowishbag);
}
}
}
@Override
public void onFailure(Throwable error, String content) {
super.onFailure(error, content);
Toast.makeText(context, "Success", Toast.LENGTH_LONG).show();
}
}
}
答案 0 :(得分:0)
每次调用getView()
时,您现在都在设置新的点击侦听器。我认为这会弄乱功能。我会将所有setOnClickListener()
调用放在if (convertView == null) {...}
块中,以便为每个ViewHolder
实例设置一次侦听器:
...
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
// The code block for one time initializations:
convertView = mInflater.inflate(R.layout.custom_item_offers, null);
holder.tv_HeaderOffer = (TextView) convertView.findViewById(R.id.tvC_ProdcutOffer);
holder.tv_OfferDescr = (TextView) convertView.findViewById(R.id.tvC_ProductDescription);
holder.tv_PostedBy = (TextView) convertView.findViewById(R.id.tvC_PostedBy);
holder.tv_RemainingDays = (TextView) convertView.findViewById(R.id.tvC_remaingTime);
holder.tv_Distance = (TextView) convertView.findViewById(R.id.tvC_distace);
holder.img_vertical = (ImageView) convertView.findViewById(R.id.ivC_Vertical);
holder.img_horizontal = (ImageView) convertView.findViewById(R.id.ivC_Horizonal);
holder.img_AddtoWishBag = (ImageView) convertView.findViewById(R.id.ivC_addToWishBag);
holder.img_storeImage = (ImageView) convertView.findViewById(R.id.ivC_Logo);
holder.img_storeDirection = (ImageView) convertView.findViewById(R.id.ivC_mapView);
holder.img_storeLocation = (ImageView) convertView.findViewById(R.id.ivC_Location);
// Set up all listeners here:
// ...
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.img_AddtoWishBag.setTag(position);
List<String> items = Arrays.asList(offerList.offersInfo.get(position).st_logo.split("\\s*,\\s*"));
// Set the latest content here. Don't do any initializations here as this code is always run.
// ...
...