public void onDestroy() { super.onDestroy(); long var1 = ViewConfiguration.getZoomControlsTimeout(); (new Timer()) .schedule( new TimerTask() { public void run() { try { CRWebViewFragment.this .getActivity() .runOnUiThread( new Runnable() { public void run() { try { if (CRWebViewFragment.this.getWebView() != null) { CRWebViewFragment.this.getWebView().removeAllViews(); } if (CRWebViewFragment.this.getWebView() != null) { CRWebViewFragment.this.getWebView().destroy(); } } catch (Exception var2) { Log.e("WebView", "Error destroying the webview: " + var2); } } }); } catch (Exception var2) { Log.e("WebView", "Error destroying the webview: " + var2); } } }, var1); }
@Test public void methodsShouldReturnAndroidConstants() { Activity context = new Activity(); ViewConfiguration viewConfiguration = ViewConfiguration.get(context); assertEquals(10, ViewConfiguration.getScrollBarSize()); assertEquals(250, ViewConfiguration.getScrollBarFadeDuration()); assertEquals(300, ViewConfiguration.getScrollDefaultDelay()); assertEquals(12, ViewConfiguration.getFadingEdgeLength()); assertEquals(125, ViewConfiguration.getPressedStateDuration()); assertEquals(500, ViewConfiguration.getLongPressTimeout()); assertEquals(115, ViewConfiguration.getTapTimeout()); assertEquals(500, ViewConfiguration.getJumpTapTimeout()); assertEquals(300, ViewConfiguration.getDoubleTapTimeout()); assertEquals(12, ViewConfiguration.getEdgeSlop()); assertEquals(16, ViewConfiguration.getTouchSlop()); assertEquals(16, ViewConfiguration.getWindowTouchSlop()); assertEquals(50, ViewConfiguration.getMinimumFlingVelocity()); assertEquals(4000, ViewConfiguration.getMaximumFlingVelocity()); assertEquals(320 * 480 * 4, ViewConfiguration.getMaximumDrawingCacheSize()); assertEquals(3000, ViewConfiguration.getZoomControlsTimeout()); assertEquals(500, ViewConfiguration.getGlobalActionKeyTimeout()); assertEquals(0.015f, ViewConfiguration.getScrollFriction()); assertEquals(1f, context.getResources().getDisplayMetrics().density); assertEquals(10, viewConfiguration.getScaledScrollBarSize()); assertEquals(12, viewConfiguration.getScaledFadingEdgeLength()); assertEquals(12, viewConfiguration.getScaledEdgeSlop()); assertEquals(16, viewConfiguration.getScaledTouchSlop()); assertEquals(32, viewConfiguration.getScaledPagingTouchSlop()); assertEquals(100, viewConfiguration.getScaledDoubleTapSlop()); assertEquals(16, viewConfiguration.getScaledWindowTouchSlop()); assertEquals(50, viewConfiguration.getScaledMinimumFlingVelocity()); assertEquals(4000, viewConfiguration.getScaledMaximumFlingVelocity()); }
/** A MapZoomControls instance displays buttons for zooming in and out in a map. */ public class MapZoomControls implements Observer { private static class ZoomControlsHideHandler extends Handler { private final ZoomControls zoomControls; ZoomControlsHideHandler(ZoomControls zoomControls) { super(); this.zoomControls = zoomControls; } @Override public void handleMessage(Message message) { this.zoomControls.hide(); } } private static class ZoomInClickListener implements View.OnClickListener { private final MapViewPosition mapViewPosition; ZoomInClickListener(MapViewPosition mapViewPosition) { this.mapViewPosition = mapViewPosition; } @Override public void onClick(View view) { this.mapViewPosition.zoomIn(); } } private static class ZoomOutClickListener implements View.OnClickListener { private final MapViewPosition mapViewPosition; ZoomOutClickListener(MapViewPosition mapViewPosition) { this.mapViewPosition = mapViewPosition; } @Override public void onClick(View view) { this.mapViewPosition.zoomOut(); } } /** Default {@link Gravity} of the zoom controls. */ private static final int DEFAULT_ZOOM_CONTROLS_GRAVITY = Gravity.BOTTOM | Gravity.RIGHT; /** Default maximum zoom level. */ private static final byte DEFAULT_ZOOM_LEVEL_MAX = 22; /** Default minimum zoom level. */ private static final byte DEFAULT_ZOOM_LEVEL_MIN = 0; /** Message code for the handler to hide the zoom controls. */ private static final int MSG_ZOOM_CONTROLS_HIDE = 0; /** Horizontal padding for the zoom controls. */ private static final int ZOOM_CONTROLS_HORIZONTAL_PADDING = 5; /** Delay in milliseconds after which the zoom controls disappear. */ private static final long ZOOM_CONTROLS_TIMEOUT = ViewConfiguration.getZoomControlsTimeout(); private boolean gravityChanged; private final MapView mapView; private boolean showMapZoomControls; private final ZoomControls zoomControls; private int zoomControlsGravity; private final Handler zoomControlsHideHandler; private byte zoomLevelMax; private byte zoomLevelMin; public MapZoomControls(Context context, final MapView mapView) { this.mapView = mapView; this.zoomControls = new ZoomControls(context); this.showMapZoomControls = true; this.zoomLevelMax = DEFAULT_ZOOM_LEVEL_MAX; this.zoomLevelMin = DEFAULT_ZOOM_LEVEL_MIN; this.zoomControls.setVisibility(View.GONE); this.zoomControlsGravity = DEFAULT_ZOOM_CONTROLS_GRAVITY; this.zoomControls.setOnZoomInClickListener( new ZoomInClickListener(mapView.getModel().mapViewPosition)); this.zoomControls.setOnZoomOutClickListener( new ZoomOutClickListener(mapView.getModel().mapViewPosition)); this.zoomControlsHideHandler = new ZoomControlsHideHandler(this.zoomControls); this.mapView.getModel().mapViewPosition.addObserver(this); int wrapContent = android.view.ViewGroup.LayoutParams.WRAP_CONTENT; LayoutParams layoutParams = new LayoutParams(wrapContent, wrapContent); this.mapView.addView(this.zoomControls, layoutParams); } public int getMeasuredHeight() { return this.zoomControls.getMeasuredHeight(); } public int getMeasuredWidth() { return this.zoomControls.getMeasuredWidth(); } /** * @return the current gravity for the placing of the zoom controls. * @see Gravity */ public int getZoomControlsGravity() { return this.zoomControlsGravity; } /** @return the maximum zoom level of the map. */ public byte getZoomLevelMax() { return this.zoomLevelMax; } /** @return the minimum zoom level of the map. */ public byte getZoomLevelMin() { return this.zoomLevelMin; } /** @return true if the zoom controls are visible, false otherwise. */ public boolean isShowMapZoomControls() { return this.showMapZoomControls; } public void layout(boolean changed, int left, int top, int right, int bottom) { if (!changed && !this.gravityChanged) { return; } int zoomControlsWidth = this.zoomControls.getMeasuredWidth(); int zoomControlsHeight = this.zoomControls.getMeasuredHeight(); int positionLeft = calculatePositionLeft(left, right, zoomControlsWidth); int positionTop = calculatePositionTop(top, bottom, zoomControlsHeight); int positionRight = positionLeft + zoomControlsWidth; int positionBottom = positionTop + zoomControlsHeight; this.zoomControls.layout(positionLeft, positionTop, positionRight, positionBottom); this.gravityChanged = false; } public void measure(int widthMeasureSpec, int heightMeasureSpec) { this.zoomControls.measure(widthMeasureSpec, heightMeasureSpec); } public void onChange() { this.onZoomLevelChange(this.mapView.getModel().mapViewPosition.getZoomLevel()); } public void onMapViewTouchEvent(MotionEvent event) { if (event.getPointerCount() > 1) { // no multitouch return; } if (this.showMapZoomControls) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: showZoomControls(); break; case MotionEvent.ACTION_CANCEL: showZoomControlsWithTimeout(); break; case MotionEvent.ACTION_UP: showZoomControlsWithTimeout(); break; } } } public void onZoomLevelChange(final int newZoomLevel) { // to allow changing zoom level programmatically, i.e. not just // by user interaction if (AndroidUtil.currentThreadIsUiThread()) { changeZoomControls(newZoomLevel); } else { this.mapView.post( new Runnable() { @Override public void run() { changeZoomControls(newZoomLevel); } }); } } /** @param showMapZoomControls true if the zoom controls should be visible, false otherwise. */ public void setShowMapZoomControls(boolean showMapZoomControls) { this.showMapZoomControls = showMapZoomControls; } /** * Sets the gravity for the placing of the zoom controls. Supported values are {@link * Gravity#TOP}, {@link Gravity#CENTER_VERTICAL}, {@link Gravity#BOTTOM}, {@link Gravity#LEFT}, * {@link Gravity#CENTER_HORIZONTAL} and {@link Gravity#RIGHT}. * * @param zoomControlsGravity a combination of {@link Gravity} constants describing the desired * placement. */ public void setZoomControlsGravity(int zoomControlsGravity) { if (this.zoomControlsGravity != zoomControlsGravity) { this.zoomControlsGravity = zoomControlsGravity; this.gravityChanged = true; } } /** * Sets the maximum zoom level of the map. * * <p>The maximum possible zoom level of the MapView depends also on other elements. For example, * downloading map tiles may only be possible up to a certain zoom level. Setting a higher maximum * zoom level has no effect in this case. * * @param zoomLevelMax the maximum zoom level. * @throws IllegalArgumentException if the maximum zoom level is smaller than the current minimum * zoom level. */ public void setZoomLevelMax(byte zoomLevelMax) { if (zoomLevelMax < this.zoomLevelMin) { throw new IllegalArgumentException(); } this.zoomLevelMax = zoomLevelMax; } /** * Sets the minimum zoom level of the map. * * @param zoomLevelMin the minimum zoom level. * @throws IllegalArgumentException if the minimum zoom level is larger than the current maximum * zoom level. */ public void setZoomLevelMin(byte zoomLevelMin) { if (zoomLevelMin > this.zoomLevelMax) { throw new IllegalArgumentException(); } this.zoomLevelMin = zoomLevelMin; } private int calculatePositionLeft(int left, int right, int zoomControlsWidth) { int gravity = this.zoomControlsGravity & Gravity.HORIZONTAL_GRAVITY_MASK; switch (gravity) { case Gravity.LEFT: return ZOOM_CONTROLS_HORIZONTAL_PADDING; case Gravity.CENTER_HORIZONTAL: return (right - left - zoomControlsWidth) / 2; case Gravity.RIGHT: return right - left - zoomControlsWidth - ZOOM_CONTROLS_HORIZONTAL_PADDING; } throw new IllegalArgumentException("unknown horizontal gravity: " + gravity); } private int calculatePositionTop(int top, int bottom, int zoomControlsHeight) { int gravity = this.zoomControlsGravity & Gravity.VERTICAL_GRAVITY_MASK; switch (gravity) { case Gravity.TOP: return 0; case Gravity.CENTER_VERTICAL: return (bottom - top - zoomControlsHeight) / 2; case Gravity.BOTTOM: return bottom - top - zoomControlsHeight; } throw new IllegalArgumentException("unknown vertical gravity: " + gravity); } private void changeZoomControls(int newZoomLevel) { boolean zoomInEnabled = newZoomLevel < this.zoomLevelMax; boolean zoomOutEnabled = newZoomLevel > this.zoomLevelMin; this.zoomControls.setIsZoomInEnabled(zoomInEnabled); this.zoomControls.setIsZoomOutEnabled(zoomOutEnabled); } private void showZoomControls() { this.zoomControlsHideHandler.removeMessages(MSG_ZOOM_CONTROLS_HIDE); if (this.zoomControls.getVisibility() != View.VISIBLE) { this.zoomControls.show(); } } private void showZoomControlsWithTimeout() { showZoomControls(); this.zoomControlsHideHandler.sendEmptyMessageDelayed( MSG_ZOOM_CONTROLS_HIDE, ZOOM_CONTROLS_TIMEOUT); } }
public class CouponDetailActivity extends Activity { public static final String tag = "StoreDetailActivity"; int index; ImageView iv; ImageView ivBar; TextView tv; TextView tv2; ZoomControls zc; HashMap<Integer, Boolean> needRefresh = new HashMap<Integer, Boolean>(); // 因可能某index的图片放大后,此时后台通知刷新,如果不记录,放大图片将被刷成原始的。 private Runnable mZoomControlRunnable; private static final long ZOOM_CONTROLS_TIMEOUT = ViewConfiguration.getZoomControlsTimeout(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.coupon_detail); // set title TextView title = (TextView) findViewById(R.id.title); title.setText(R.string.coupon_list_title); // end title Intent intent = getIntent(); index = intent.getIntExtra("coupon_index", 0); final int sid = intent.getIntExtra("sid", 0); iv = (ImageView) findViewById(R.id.coupon_detail_img); ivBar = (ImageView) findViewById(R.id.coupon_bar_img); tv = (TextView) findViewById(R.id.cbrief); tv2 = (TextView) findViewById(R.id.expiry); showDetail(sid, index); if (CouponListActivity.mCouponList.get(index).getBigImg() == null) { needRefresh.put(index, true); // 先用小图片显示,等大图片下载完再更新 iv.setImageBitmap(CouponListActivity.mCouponList.get(index).getImg()); } final Button preBt = (Button) findViewById(R.id.pre_coupon); final Button nextBt = (Button) findViewById(R.id.next_coupon); final Button curr_total = (Button) findViewById(R.id.curr_total); if (index == 0) { preBt.setEnabled(false); preBt.setVisibility(View.INVISIBLE); } else if (index == CouponListActivity.mCouponList.size() - 1) { nextBt.setEnabled(false); nextBt.setVisibility(View.INVISIBLE); } preBt.setOnClickListener( new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if (index > 0) { index--; showDetail(sid, index); if (CouponListActivity.mCouponList.get(index).getBigImg() == null) { needRefresh.put(index, true); iv.setImageBitmap(CouponListActivity.mCouponList.get(index).getImg()); } } if (index == 0) { preBt.setEnabled(false); preBt.setVisibility(View.INVISIBLE); } if (nextBt.isEnabled() == false) { nextBt.setEnabled(true); nextBt.setVisibility(View.VISIBLE); } curr_total.setText((index + 1) + "/" + CouponListActivity.mCouponList.size()); } }); nextBt.setOnClickListener( new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if (index < CouponListActivity.mCouponList.size() - 1) { index++; showDetail(sid, index); if (CouponListActivity.mCouponList.get(index).getBigImg() == null) { needRefresh.put(index, true); iv.setImageBitmap(CouponListActivity.mCouponList.get(index).getImg()); } } if (index == CouponListActivity.mCouponList.size() - 1) { nextBt.setEnabled(false); nextBt.setVisibility(View.INVISIBLE); } if (preBt.isEnabled() == false) { preBt.setEnabled(true); preBt.setVisibility(View.VISIBLE); } curr_total.setText((index + 1) + "/" + CouponListActivity.mCouponList.size()); } }); /////////////////////////////////////////////////////////////////////////////// String[] arr = new String[CouponListActivity.mCouponList.size()]; for (int i = 0; i < arr.length; i++) { arr[i] = " No." + String.valueOf(i + 1); } final EfficientAdapter adapter = new EfficientAdapter(this, arr, index); curr_total.setOnClickListener( new OnClickListener() { public void onClick(View v) { adapter.mDisabledIndex = index; new AlertDialog.Builder(CouponDetailActivity.this) // .setItems(arr, new DialogInterface.OnClickListener() { // public void onClick(DialogInterface dialog, int which) { // showDetail(sid,which); // index=which; // // curr_total.setText((which+1)+"/"+CouponListActivity.mCouponList.size()); // // // nextBt.setEnabled(true); // nextBt.setVisibility(View.VISIBLE); // preBt.setEnabled(true); // preBt.setVisibility(View.VISIBLE); // // if(index==0){ // preBt.setEnabled(false); // preBt.setVisibility(View.INVISIBLE); // } // if(index==CouponListActivity.mCouponList.size()-1){ // nextBt.setEnabled(false); // nextBt.setVisibility(View.INVISIBLE); // } // } // }) .setAdapter( adapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { showDetail(sid, which); index = which; curr_total.setText( (which + 1) + "/" + CouponListActivity.mCouponList.size()); nextBt.setEnabled(true); nextBt.setVisibility(View.VISIBLE); preBt.setEnabled(true); preBt.setVisibility(View.VISIBLE); if (index == 0) { preBt.setEnabled(false); preBt.setVisibility(View.INVISIBLE); } if (index == CouponListActivity.mCouponList.size() - 1) { nextBt.setEnabled(false); nextBt.setVisibility(View.INVISIBLE); } } }) .show(); } }); curr_total.setText((index + 1) + "/" + CouponListActivity.mCouponList.size()); ////////////////////////////////////////////////////////////////////// // 放缩图片 zc = (ZoomControls) findViewById(R.id.zoomControls); class PrivateHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { default: super.handleMessage(msg); break; } } } final Handler mPrivateHandler = new PrivateHandler(); mZoomControlRunnable = new Runnable() { public void run() { /* Don't dismiss the controls if the user has * focus on them. Wait and check again later. */ if (!zc.hasFocus()) { zc.hide(); } else { mPrivateHandler.removeCallbacks(mZoomControlRunnable); mPrivateHandler.postDelayed(mZoomControlRunnable, ZOOM_CONTROLS_TIMEOUT); } } }; zc.setOnZoomInClickListener( new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub iv.setImageBitmap( Helper.scaleBitmap(CouponListActivity.mCouponList.get(index).getBigImg(), 2.0f)); Log.d(tag, "ZoomIn"); mPrivateHandler.removeCallbacks(mZoomControlRunnable); mPrivateHandler.postDelayed(mZoomControlRunnable, ZOOM_CONTROLS_TIMEOUT); } }); zc.setOnZoomOutClickListener( new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub iv.setImageBitmap( Helper.scaleBitmap(CouponListActivity.mCouponList.get(index).getBigImg(), 1f)); Log.d(tag, "ZoomOut"); mPrivateHandler.removeCallbacks(mZoomControlRunnable); mPrivateHandler.postDelayed(mZoomControlRunnable, ZOOM_CONTROLS_TIMEOUT); } }); zc.setVisibility(View.INVISIBLE); // 手势 final GestureDetector gestureDetector = new GestureDetector( new OnGestureListener() { public boolean onDown(MotionEvent arg0) { // TODO Auto-generated method stub System.out.println("dddddddddddddddddd onDown"); zc.setVisibility(View.VISIBLE); mPrivateHandler.removeCallbacks(mZoomControlRunnable); mPrivateHandler.postDelayed(mZoomControlRunnable, ZOOM_CONTROLS_TIMEOUT); return false; } public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub // System.out.println("dddddddddddddddddd onFling"); return false; } public void onLongPress(MotionEvent arg0) { // TODO Auto-generated method stub // System.out.println("ddddddddddddddddddx onLongPress"); } public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub // System.out.println("dddddddddddddd onScroll"); return false; } public void onShowPress(MotionEvent arg0) { // TODO Auto-generated method stub // System.out.println("dddddddddddddd onShowPress"); } public boolean onSingleTapUp(MotionEvent arg0) { // TODO Auto-generated method stub // System.out.println("dddddddddddddd onSingleTapUp"); return false; } }); iv.setOnTouchListener( new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub gestureDetector.onTouchEvent(event); return false; } }); // iv.setScrollbarFadingEnabled(true); // iv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // iv.setScrollContainer(true); ////////////////////// Helper.setOnInfoAndHome(this); } public void showDetail(int sid, int index) { iv.setImageBitmap(CouponListActivity.mCouponList.get(index).getBigImg()); ivBar.setImageBitmap(CouponListActivity.mCouponList.get(index).getBarImg()); tv.setText(CouponListActivity.mCouponList.get(index).getCbrief()); // --------------------------- String date = CouponListActivity.mCouponList.get(index).getCvdate(); date = date.substring(date.indexOf(',') + 1, date.indexOf('|')); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); // mm一定要大写! String dateStr = ""; try { Date d = df.parse(date); DateFormat fullDateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.DEFAULT, new Locale("en")); dateStr = fullDateFormat.format(d); dateStr = dateStr.substring(0, dateStr.indexOf(':') - 2).replaceFirst(" ", ""); } catch (ParseException e) { e.printStackTrace(); Log.e(tag, "transfer date fail" + e); } tv2.setText("Expiry:" + dateStr); } /* public void showDetail(int sid,int index){ BmpAsyncTask afs = new BmpAsyncTask(this); BaCoupon bc = CouponListActivity.mCouponList.get(index); int cid =bc.getCid(); //注意,调用的是getcoupondetail2,而不是getcoupondetail,该返回值会覆盖原来的type=icon,但没关系,只是图片大小而已,况且当返回时,是缓存的icon图片,这么处理的原因是节省内存。 afs.execute(BrandedConstants.getcoupondetail2, "1",String.valueOf(sid),String.valueOf(cid),"","240","240"); // try { // Bitmap bmp = (Bitmap)afs.get(); // if(bmp!=null){ // bc.setImg(bmp); // }else{ // bc.setImg(BitmapFactory.decodeResource(getResources(), R.drawable.coupon_icon)); // } // // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (ExecutionException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } //这里单独写是因为需要在onPostExecute处理结果,才能有进度条,否则直接调用.get()会同步等待,导致几乎看不到进度条, private class BmpAsyncTask extends AsyncTask<String, Void, Bitmap> { Context context; private String error = null; private boolean isFatalError = false; private ProgressDialog dialog = null; ImageView iv; TextView tv ; TextView tv2 ; public BmpAsyncTask(Context ctx) { context = ctx; iv = (ImageView)findViewById(R.id.coupon_detail_img); tv = (TextView)findViewById(R.id.cbrief); tv2 = (TextView)findViewById(R.id.expiry); } @Override protected Bitmap doInBackground(String... urls) { return RestClient.getCouponDetail(urls[1], urls[2],urls[3], urls[4],urls[5], urls[6]); } protected void onPostExecute(Bitmap unused) {// 运行于UI线程, // //跟extends后面的泛型(参数,进度值,返回值)中的返回值要匹配 // returnValue = unused; 可以通过调用类的get方法,取得结果 dialog.dismiss(); dialog = null; if (error != null) { Toast.makeText(context, error, Toast.LENGTH_LONG).show(); if (isFatalError) { new AlertDialog.Builder(context) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("Fatal Error") .setMessage( "Network or other fatal error,Please try again later.") .setPositiveButton(R.string.BUTTON_OK, new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int whichButton) { System.exit(1); } }).show(); } }else{ //iv.setImageBitmap(CouponListActivity.mCouponList.get(index).getImg()); if(unused!=null){ iv.setImageBitmap(unused);//只有图片,需要从网上取大图片(原来list中的是小图标),其他字段从list里面就有。 }else{ iv.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.coupon_icon)); } tv.setText(CouponListActivity.mCouponList.get(index).getCbrief()); //--------------------------- String date = CouponListActivity.mCouponList.get(index).getCvdate(); date =date.substring(date.indexOf(',')+1,date.indexOf('|')); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); //mm一定要大写! String dateStr=""; try { Date d = df.parse(date); DateFormat fullDateFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.DEFAULT, new Locale("en")); dateStr = fullDateFormat.format(d); dateStr = dateStr.substring(0,dateStr.indexOf(':')-2).replaceFirst(" ", ""); } catch (ParseException e) { e.printStackTrace(); Log.e(tag, "transfer date fail"+e); } tv2.setText("Expiry:"+dateStr); //------------------------------ } } // private Object returnValue = null; protected void onPreExecute() {// 执行预处理,它运行于UI线程, dialog = new ProgressDialog(context); dialog.setMessage("get from network, please wait.."); dialog.show(); } } */ @Override protected void onResume() { IntentFilter filter = new IntentFilter(); filter.addAction(CouponListActivity.BROADCAST_FOR_COUPONS_DETAIL); this.registerReceiver(mBr, filter); super.onResume(); } @Override protected void onPause() { this.unregisterReceiver(mBr); super.onPause(); } public BroadcastReceiver mBr = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { Boolean isNeedRefresh = needRefresh.get(index); if (isNeedRefresh != null && isNeedRefresh && CouponListActivity.mCouponList.get(index).getBigImg() != null) { iv.setImageBitmap(CouponListActivity.mCouponList.get(index).getBigImg()); needRefresh.put(index, false); } ivBar.setImageBitmap(CouponListActivity.mCouponList.get(index).getBarImg()); Log.d("adapter", "notifyDataSetChanged"); } }; private static class EfficientAdapter extends BaseAdapter { private LayoutInflater mInflater; String[] mStrArr; int mDisabledIndex; public EfficientAdapter(Context context, String[] strArr, int disabledIndex) { mInflater = LayoutInflater.from(context); mStrArr = strArr; mDisabledIndex = disabledIndex; } public int getCount() { return CouponListActivity.mCouponList.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_forward, null); holder = new ViewHolder(); holder.text_1 = (TextView) convertView.findViewById(R.id.text_1); holder.couponOrFlyerIcon = (ImageView) convertView.findViewById(R.id.couponOrFlyer_icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // Odd/Even use different color // if(position%2==0){ // convertView.setBackgroundColor(Color.parseColor("#FFFFFF")); // } // else{ // convertView.setBackgroundColor(Color.parseColor("#EEEEEE")); // } holder.text_1.setText(mStrArr[position]); holder.couponOrFlyerIcon.setImageBitmap( CouponListActivity.mCouponList.get(position).getImg()); if (position == mDisabledIndex) { // holder.text_1.setEnabled(false); holder.text_1.setTextColor(Color.GRAY); } else { // holder.text_1.setEnabled(true); holder.text_1.setTextColor(Color.BLACK); } parent.setLayoutParams(new LinearLayout.LayoutParams(150, LayoutParams.WRAP_CONTENT)); return convertView; } static class ViewHolder { TextView text_1; ImageView couponOrFlyerIcon; } } }