使光标焦点来编辑文本android
我有一个Android的列表视图与成千上万的项目。 其中的每个Item都包含一个带有默认文本的EditText 。
listview加载数据成功后。 我点击一个项目 - 第一次,光标焦点到选定的EditText>软输入键盘出现>键盘推动列表视图向上滚动,选定的EditText失去了焦点! 由于键盘显示在屏幕上,这不会再发生。 我不知道
我已通过此事件检查过它:
setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
}
}
所以这里的问题是,在我失去了我的焦点之前,如何重新聚焦或将光标的焦点移到准确的位置
我认为你应该请求关注你的EditText onClickListener。
someEditText.setOnClickListener(new OnClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            someEditText.requestFocus();                                
        }
    });
但没有看到你的代码,我只是猜测。
经过数周的研究,我有我自己的解决方案,但非常忙碌,为每个人都知道更新。
该解决方案是创建一个自定义滚动 视图,以涵盖edittexts的列表视图 。
在滚动视图中,重写像这样的事件。 而已。
有了这个,在未来,如果我们希望我们的Edittext滚动平滑或控制聚焦
public class VerticalScrollview extends ScrollView {
    public VerticalScrollview(Context context) {
        super(context);
        init();
    }
    public VerticalScrollview(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public VerticalScrollview(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
    private void init(){
        //setFillViewport(true);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        onTouchEvent(ev);
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                Log.i("VerticalScrollview", "onInterceptTouchEvent: DOWN super false");
                break;
            case MotionEvent.ACTION_MOVE:
                return false; // redirect MotionEvents to ourself
            case MotionEvent.ACTION_CANCEL:
                Log.i("VerticalScrollview", "onInterceptTouchEvent: CANCEL super false" );
                super.onTouchEvent(ev);
                break;
            case MotionEvent.ACTION_UP:
                Log.i("VerticalScrollview", "onInterceptTouchEvent: UP super false" );
                return false;
            default: Log.i("VerticalScrollview", "onInterceptTouchEvent: " + action ); break;
        }
        return false;
//        onTouchEvent(ev);
//        float startY=0;
//        if (ev.getAction() == MotionEvent.ACTION_DOWN) startY = ev.getY();
//        return (ev.getAction() == MotionEvent.ACTION_DOWN) && (Math.abs(startY - ev.getY()) > 50);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        Log.i("VerticalScrollview", "onTouchEvent. action: " + ev.getAction());
        return true;
    }
}
上一篇: make a cursor focus to edittext android
下一篇: You need to use a Theme.AppCompat theme (or descendant) with this activity
