2015-11-20 4 views
0

У меня есть андроид listview с тысячами элементов. Каждый элемент внутри его просто содержит EditText с текстом по умолчанию.сделать курсор фокус на edittext android

После просмотра данных по загрузке успешно. Я нажимаю на один из элементов - в первый раз, курсор фокусируется на выбранный EditText> Появляется мягкая клавиатура ввода> Клавиша нажимает прокрутку списка, и выбранный EditText потерял фокус! Поскольку клавиатура была показана на экране, этого больше не будет. Я не знаю,

Я проверил это событие:

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

Так что вопрос здесь является как можно переориентировать или сделать фокус моего курсора на точно положение после того, как я потерял мой фокус до

ответ

0

Я думаю, что вы должны запросить фокус в своем EditText onClickListener.

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

Но, не видя своего кода, я просто угадываю.

+0

requestFocus(), кажется, не работает должным образом. –

+0

Вы также можете перемотать список в позицию с заданным номером, например '((ListView) findViewById (android.R.id.MYLISTVIEW)). SetSelection (position);' –

+0

Это просто прокрутка к данной позиции, а не фокус на edittext внутри. –

0

У меня есть собственное решение после исследования в течение нескольких недель, но очень занято, чтобы обновить для всех.

Решение создается пользовательский Scrollview для того, чтобы покрыть ListView из edittexts.

В 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; 
    } 
} 
Смежные вопросы