技术方面:
1:这是令我印象最深刻的问题,当我用handler接收数据时用message.what中的数据分辨是处理哪些部分,非常有可能使用的公共字段与本Activity中使用的字段是一样的,比如
public void handleMessage(Message msg)
{
if(AccountInfoActivity.sSuccess==msg.what)
{
代码A
}else if(AccountInfoActivity.sFail==msg.what)
{
代码B
}else if(MainActivity.checkOK==msg.what)
{
代码C
}
其中的AccountInfoActivity.sSuccess和MainActivity.checkOK可能会相等,所以当返回数据为MainActivity.checkOK也会只执行代码A。所以,在handler中使用的标记字段最好都统计存放在枚举类型中,如
public enum ApplicationFlag
{
sSuccess(1),sFail(2),//是否能跳转到主页面
sSuccessRegister(3),sFailRegister(4),//是否注册成功
sSuccessLocation(5),sFailLocation(6),//是否定位成功
sCheckSuccess(7),sCheckFail(8);//检测手机号是否被注册过
public int flag;
private RegisterFlag(int flag)
{
this.flag=flag;
}
}
2:页面切换与网络请求方面的问题
3:两个令人头疼的问题是一起出现的,android只能单线程更新UI和使用onTuchListener时其中获得的eventX和eventY与相同页面中的组件位置的关系。我们的应用中有这样一个场景,切换到“页面A”时,显示的是一整屏的广告。广告页面可以上滑一半,在露出的一半中显示下图:
如果我直接改变广告页的layoutparams则,每次更新倒计时时广告页要闪一下,所以广告页上划我使用了动画。这时另一个问题出现了,其中的“分享”和“对号”按钮无法点击,所以我给广告页加了onTouchListener方法想用MotionEvent的坐标确定是点击的哪个按钮,但是当我获得“分享”和“对号”按钮的位置,此时在Y轴上的位置eventY与"分享".getBottom();获得的坐标差距非常大,而且分辨率越高的屏幕差别越大。最后使用WindowManager
wm = getActivity().getWindowManager();使用int height = wm.getDefaultDisplay().getHeight();获得屏幕高度,然后判断在屏幕的几分之几处会触发“分享”或“对号”按钮的事件。
4:获得ListView中的EditText文字
这应该是一个公共的问题,就是你不能直接通过editText.getText().toString()来获得EditText中的文字。需要使用TextWatcher来实现,这篇文章中总结过了。
5:同样是ListView的问题,我们把Adapter中的数据放入ListView时我们经常通过
if(convertView==null)
{
holder=new ViewHolder();
convertView=inflater.inflate(R.layout.spinner_item, null);
holder.text=(TextView)convertView.findViewById(R.id.text);
holder.button=(Button)convertView.findViewById(R.id.button);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
这样类似的代码重用资源,假如:holder.text开始是隐藏的,当我点击holder.button时让holder.text动画出现,再点一下holder.text消失。此时如果你复用convertView,点击第一个holder.button正常,但当点击第二时,第一个holder.text同样会出现动画然后消失。此时我的解决办法是把holder=(ViewHolder)convertView.getTag();去掉,每次都重新生成convertView。