zoukankan      html  css  js  c++  java
  • 解决Item控件抢占焦点

    http://www.imooc.com/learn/372

    在抢占焦点的控件加上

    方法一:

      android:focusable="false"  

    方法二:

      在外界布局上

      android:descendantFocusability="blocksDescendants"

    原因参考

    android.widget.AbsListView

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

      

    case MotionEvent.ACTION_UP: {
    switch (mTouchMode) {
    case TOUCH_MODE_DOWN:
    case TOUCH_MODE_TAP:
    case TOUCH_MODE_DONE_WAITING:
    final int motionPosition = mMotionPosition;
    final View child = getChildAt(motionPosition - mFirstPosition);
    if (child != null && !child.hasFocusable()) {
    if (mTouchMode != TOUCH_MODE_DOWN) {
    child.setPressed(false);
    }

    if (mPerformClick == null) {
    mPerformClick = new PerformClick();
    }

    final AbsListView.PerformClick performClick = mPerformClick;
    performClick.mChild = child;
    performClick.mClickMotionPosition = motionPosition;
    performClick.rememberWindowAttachCount();

    mResurrectToPosition = motionPosition;

    if (mTouchMode == TOUCH_MODE_DOWN || mTouchMode == TOUCH_MODE_TAP) {
    final Handler handler = getHandler();
    if (handler != null) {
    handler.removeCallbacks(mTouchMode == TOUCH_MODE_DOWN ?
    mPendingCheckForTap : mPendingCheckForLongPress);
    }
    mLayoutMode = LAYOUT_NORMAL;
    if (!mDataChanged && mAdapter.isEnabled(motionPosition)) {
    mTouchMode = TOUCH_MODE_TAP;
    setSelectedPositionInt(mMotionPosition);
    layoutChildren();
    child.setPressed(true);
    positionSelector(child);
    setPressed(true);
    if (mSelector != null) {
    Drawable d = mSelector.getCurrent();
    if (d != null && d instanceof TransitionDrawable) {
    ((TransitionDrawable) d).resetTransition();
    }
    }
    postDelayed(new Runnable() {
    public void run() {
    child.setPressed(false);
    setPressed(false);
    if (!mDataChanged) {
    post(performClick);
    }
    mTouchMode = TOUCH_MODE_REST;
    }
    }, ViewConfiguration.getPressedStateDuration());
    } else {
    mTouchMode = TOUCH_MODE_REST;
    }
    return true;
    } else if (!mDataChanged && mAdapter.isEnabled(motionPosition)) {
    post(performClick);
    }
    }
    mTouchMode = TOUCH_MODE_REST;
    break;

  • 相关阅读:
    DataSnap(MIDAS)三层架构中,常用事件及其触发顺序
    如何让中间层MIDAS/DATASNAP支持大量的并发用户并且控制连接数量
    插件之注册插件和注册插件中的模块
    TField.ProviderFlags
    datasnap生命期LifeCycle
    datasnap服务器支持的参数类型
    TDSAuthenticationManager的用法
    泛型实现的对象池
    服务器端如何防止DDOS
    获得客户端的信息
  • 原文地址:https://www.cnblogs.com/exmyth/p/4567245.html
Copyright © 2011-2022 走看看