1.调用FragmentTransaction.add()添加fragment时候,有时候会发生新添加界面是透明的,并且,touch事件如点击,拖动等会穿透到下面的fragment。
解决方法:
1)透明可以手动在布局文件添加一个白色背景(:P)
2)touch事件穿透。给fragment最外层布局添加一个setOnTouchListener(),并在回调中直接return true,即将事件阻断在当前fragment。
2.布局中上部是一些空间,下部有一个recyclerview、listview、gridview等的时候,有时刚进入界面,就会无故的自动滑到recyclerview、listview、gridview的首个子项位置。
解决方法:
xml文件中在最外层添加一条属性:
android:descendantFocusability="blocksDescendants"
3.外层为scrollview,里面又添加了listview、gridview等空间,显示的时候堆积在一块。
解决方法:
xml文件中在scrollview中添加一条属性:
android:fillViewport="true"
4.外层scrollview里层嵌套listview、gridview等,只显示listview、gridview等的一行item,但是可以通过在电脑android虚拟机上,使用鼠标滑轮进行滑动。
解决方法:
自定义listview、gridview, 主要复写onMeasure(), dispatchTouchEvent()。
下面以gridview为例:
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_MOVE){
return true;
}
return super.dispatchTouchEvent(ev);
}
}
5.子线程更新ui
安卓不允许子线程更新UI是因为UI访问是没有加锁的,多个线程访问UI不是线程安全的。
checkThread()方法,回检测当前线程是否是主线程,而此方法会在activity的onResume()中执行。所以在onResume之前在子线程更新ui,不会报错。
(这次先到这里,以后遇到或者想起来再来添加 :P)