使光标焦点来编辑文本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;
    }
}
链接地址: http://www.djcxy.com/p/4145.html

上一篇: make a cursor focus to edittext android

下一篇: You need to use a Theme.AppCompat theme (or descendant) with this activity