EditTexts внутри ExpandableListView - PullRequest
4 голосов
/ 28 июля 2011

Здравствуйте, я пытаюсь создать действие, которое отображает ExpandableListView, как показано на рисунке.

Когда вы щелкаете по группе, она раскрывается и показывает LinearLayout с текстовым представлением и редактируемым текстом.

Правильно знаю, у меня проблема в том, что при нажатии на EditText он не фокусируется, и мне приходится дважды нажимать на него, чтобы заставить его сфокусироваться и отображать клавиатуру, а затем, когда я ввожу текст, явначале ничего не вижу, пока я печатаю, а затем, когда я скрываю клавиатуру, текст EditText обновляется текстом, который я набрал

Я пытался добавить android: downndantFocusability = "afterDescendants" в макет расширяемого списка, но поведениеэто то же самое.

Любая идея?или каким-либо другим способом я мог бы реализовать этот макет ??

Expandable ListView with EditText

Ответы [ 4 ]

6 голосов
/ 05 января 2014

добавьте это в манифест сразу после андроида: имя в вашей активности

 android:windowSoftInputMode="adjustPan"
1 голос
/ 18 февраля 2012

Попробуйте сохранить значения в Edittext в строковую переменную, используя функцию

String temp;

editText.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub

    }
    public void beforeTextChanged(CharSequence s, int start, int count,
    int after) {
        // TODO Auto-generated method stub

    }

    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

        temp = s.toString();//editText.getText().toString();

        childValues[groupPosition][childPosition][]= temp ;

        Toast.makeText(context, ""+childValues[groupPosition][childPosition], Toast.LENGTH_SHORT).show();
    }
});

и в функции getChild() всегда проверяйте данные в temp и значение settext() для этого конкретного edittext.

1 голос
/ 29 июля 2011

Я не уверен, как решить проблему с фокусировкой, но я знаю, почему вам нужно свернуть и развернуть группу, чтобы увидеть текст в editText.Представление списка не обновляется, пока вы не прокрутите или не сделаете что-то вроде раскрытия и свертывания списка.Поэтому лучший способ решить эту проблему - создать список строк, которые будут значениями editTexts в представлении списка.Затем создайте прослушиватель onKeyClick () для каждого из editTexts и сделайте следующее:

editText1.setOnKeyListener(new EditText.OnKeyListener()
{
    public boolean onKey(View editText, int keyCode, KeyEvent keyEvent)
    {
        // Get the position of the item somehow
        int position = 4;
        // Get value from List<String> for editTexts
        String textValue = listOfValues.get(position);
        textValue = ((EditText)editText).getValue();
        adapter.notifyDataSetChanged();
        return false;
    }
});

Здесь происходит то, что вы получаете значение editText после нажатия клавиши и меняете значениестроки в списке к новому значению.Затем вы сообщаете адаптеру, что значение одного из элементов изменилось и его необходимо обновить.Хотя это не эффективный способ решения проблемы, это решение для резервного копирования, если вы не можете придумать лучший способ.

0 голосов
/ 02 января 2016

Вы должны добавить две вещи.

1) expandableListView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

2) В декларации (о вашей деятельности) android:windowSoftInputMode="adjustPan"

...