android 难题,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);

XRecyclerView嵌套不可滑动ListView时,下拉刷新卡顿

转载自:Android 实现ListView不可滚动效果

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值