点击button,进入另一个Activity后返回.右侧图标不见了.
此问题在2.3.6的机器上发现了.同样的apk装到4.0.4的版本上发现没问题.一切ok.
========================================================================
原因如下:
当前Activity进入另外的Activity的时候会自动执行onSaveInstanceState来保存当前的Activity的一些状态信息.如上面edittext中的文字.
edittext继承textview.在textview中找到onSaveInstanceState函数.分别比较2.3.6和4.0.4的该函数发现了一处不一样的地方
public Parcelable onSaveInstanceState(){ ......... setError(null); //此函数在2.3.6中有,4.0.4版本中没有. ss.error = mError; return ss; ......... }
public void setError(CharSequence error) { if (error == null) { setError(null, null); //2.3.6会执行此函数 } else { Drawable dr = getContext().getResources(). getDrawable(com.android.internal.R.drawable. indicator_input_error); dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight()); setError(error, dr); } }
public void setError(CharSequence error, Drawable icon) { error = TextUtils.stringOrSpannedString(error); mError = error; mErrorWasChanged = true; final Drawables dr = mDrawables; //由于icon为null.所以不管哪个条件.right的icon都被重置为null. if (dr != null) { setCompoundDrawables(dr.mDrawableLeft, dr.mDrawableTop, icon, dr.mDrawableBottom); } else { setCompoundDrawables(null, null, icon, null); } if (error == null) { if (mPopup != null) { if (mPopup.isShowing()) { mPopup.dismiss(); } mPopup = null; } } else { if (isFocused()) { showError(); } } }
所以会发现在点击another时,仔细观察会发现:右侧图标会先消失.再进入另一个Activity.并且返回的时候没有此图标了==========================================================================================
解决方法:很简单.在Activity的onResume的函数中.加入如下代码,判断edittext是否为空.然后进行重新设置
if(search_et1 != null) { if(TextUtils.isEmpty(search_et1.getText().toString())) search_et1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.drawable.search), null); else search_et1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.drawable.search_close), null); }