Android开发中遇到的难题与解决方案

  • 引用资源文件错误,导致运行失败,无法确定错误位置
    解决方案:在Android Studio的Terminal控制台输入:gradlew compileDebugSources

  • 获取webView的高度

public void initView(){
	webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        setDetailViewHeight();
    }
});

   /**
     * 获取webView的高度
     */
    public void setDetailViewHeight() {
        ViewTreeObserver viewTreeObserver = webView.getViewTreeObserver();
        viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                int webHeight = webView.getMeasuredHeight();
                if (webHeight != 0) {
                    webView.getViewTreeObserver().removeOnPreDrawListener(this);
                }
                return false;
            }
        });
    }
  • XRecyclerView上拉加载刷新有3s左右的延迟
    注意:出现的问题可能和嵌套在ScrollView布局中有关系,具体原因不太清楚,有清楚的可以评论告知一下。
    解决方法:
recyclerView.setHasFixedSize(true);
recyclerView.setNestedScrollingEnabled(false);
public class ScrollDisabledListView extends ListView {
 
    private int mPosition;
 
    public ScrollDisabledListView(Context context) {
        super(context);
    }
 
    public ScrollDisabledListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public ScrollDisabledListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
 
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;
 
        if (actionMasked == MotionEvent.ACTION_DOWN) {
            // 记录手指按下时的位置
            mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
            return super.dispatchTouchEvent(ev);
        }
 
        if (actionMasked == MotionEvent.ACTION_MOVE) {
            // 最关键的地方,忽略MOVE 事件
        	// ListView onTouch获取不到MOVE事件所以不会发生滚动处理
            return true;
        }
 
        // 手指抬起时
        if (actionMasked == MotionEvent.ACTION_UP
        		|| actionMasked == MotionEvent.ACTION_CANCEL) {
            // 手指按下与抬起都在同一个视图内,交给父控件处理,这是一个点击事件
            if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {
                super.dispatchTouchEvent(ev);
            } else {
            	// 如果手指已经移出按下时的Item,说明是滚动行为,清理Item pressed状态
                setPressed(false);
                invalidate();
                return true;
            }
        }
 
        return super.dispatchTouchEvent(ev);
    }
}

同时需要在Java代码中为ListView设置默认取消焦点

 listView.setFocusable(false);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值