密集时由键盘隐藏的ListView中的EditText

时间:2013-01-29 02:09:03

标签: android listview focus android-edittext

我有一个包含EditText的行的ListView。

当我点击EditText并且它尚未聚焦时它会获得焦点,键盘出现并且EditText被移动到CandidateView上方(所需行为)。

然而,当我按下键时,EditText保持焦点并接收输入但向下移动并被键盘遮挡(前一个移动被反转)。

当我在没有显示键盘的情况下选择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"到列表视图。

如果没有adjustPan,EditText根本无法获得焦点,但它无法完全解决问题。

有人知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

<activity name="YourActivity"
    android:windowSoftInputMode="stateVisible|adjustResize|adjustPan">
</activity>
清单文件中的

如果您使用的是adjustResize,则ScrollView最有可能必须正常工作。

答案 1 :(得分:0)

花了这个问题花了好几个小时后,这是我的解决方案(适用于Android&lt; 4.2):

1)Manifest =&gt;机器人:windowSoftInputMode =&#34; adjustPan&#34;

2)活动=&gt;创建OnTouchListner并传递给Adapter

    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);
        }
        }