使光标焦点到edittext android

时间:2015-11-20 15:09:53

标签: android android-edittext focus

我有一个包含数千个项目的android列表视图。其中的每个项目只包含 EditText ,默认为文本。

listview加载数据成功后。我点击其中一个项目 - 第一次,光标焦点到选定的EditText>出现软输入键盘>键盘推动列表视图向上滚动,所选的EditText失去了焦点!由于键盘显示在屏幕上,这将不再发生。我不知道

我已通过此次活动检查过:

setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
}
}

所以这里的问题是如何在我失去焦点之前重新聚焦或将光标聚焦到准确的位置

2 个答案:

答案 0 :(得分:0)

我认为你应该在你的EditText onClickListener中请求焦点。

someEditText.setOnClickListener(new OnClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            someEditText.requestFocus();                                
        }
    });

但是没有看到你的代码,我只是在猜测。

答案 1 :(得分:0)

我经过几周的研究后得到了自己的解决方案,但非常忙于更新,每个人都知道。

为解决方案创建自定义 Scrollview ,以涵盖 listtexts列表视图

在Scrollview中,覆盖此类事件。那就是它。

有了这个,将来如果我们希望我们的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;
    }
}