一些小问题的总结(会不断添加)

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)

猜你喜欢

转载自blog.csdn.net/qq_23057645/article/details/65628278
今日推荐