最近参考此文章
http://www.cnblogs.com/over140/archive/2011/04/25/2026812.html . 做了一个edittext的一个控件.发现了一个问题.刚进入输入数据,右侧图标出现
点击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);
}