EditText в ListView, скрытый клавиатурой при фокусировке

У меня есть ListView, содержащий строки с EditText.

Когда я нажимаю на EditText и не фокусируется, он получает фокус, появляется клавиатура, а EditText перемещается над CandidateView (желаемое поведение).

Однако, когда я нажимаю клавишу, EditText сохраняет фокус и получает вход, но движется вниз и скрывается клавиатурой (предыдущее движение отменено).

Когда я нажимаю на EditText, когда он уже выбран без показанной клавиатуры, клавиатура появляется, но EditText не перемещается в правильное положение (над CandidateView). Он все еще получает вход.

Я добавляю заголовок, содержащий EditText, и там все работает правильно.

Это код моего массива ArrayAdapter, где создается представление строки:

View view = inflater.inflate(R.layout.row_profile_entry_text, null); final String question = getItem(position); TextView textViewQuestion = (TextView) view.findViewById(R.id.rpeq_TextViewQuestion); textViewQuestion.setText(question); final EditText editTextAnswer = (EditText) view.findViewById(R.id.rpeq_EditTextAnswer); editTextAnswer.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { mAnswers.put(question, s.toString()); } }); if (mAnswers.containsKey(question)) { editTextAnswer.setText(mAnswers.get(question)); } return view; 

Я также хотел бы подчеркнуть, что я уже добавил
android:windowSoftInputMode="adjustPan" в манифест и
android:descendantFocusability="beforeDescendants" в ListView, поскольку большинство ответов на другие вопросы предлагают.

Без adjustPan EditText не может получить фокус на всех, но он не решает проблему полностью.

У кого-то есть представление, что я делаю неправильно?

Solutions Collecting From Web of "EditText в ListView, скрытый клавиатурой при фокусировке"

Попробуй это:

 <activity name="YourActivity" android:windowSoftInputMode="stateVisible|adjustResize|adjustPan"> </activity> 

В файле манифеста.

Скорее всего, adjustResize должен работать, если вы используете ScrollView .

После многих часов, потраченных на эту проблему, это мое решение (для Android <4.2):

1) Manifest => android: windowSoftInputMode = "adjustPan"

2) Activity => создать OnTouchListner и перейти к адаптеру

  private OnTouchListener exampleOnTouchListener = new OnTouchListener() { @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View v, MotionEvent event) { if (MotionEvent.ACTION_UP == event.getAction()) { int position = (Integer) v.getTag(); myListView.setSelection(position); } return false; } }; 

3) Адаптер

  if (exampleOnTouchListener!= null) { myEditText.setTag(position); myEditText.setOnTouchListener(exampleOnTouchListener); // if last element set padding bottom for spacing if (position == items.size() - 1) { LinearLayout myLinearLayout = (LinearLayout) convertView .findViewById(R.id.ticketcontolProposedRealvalueLinearLayout); myLinearLayout.setPadding(0, 0, 0,SET_PADDING_BOTTOM); } }