Как получить обновленные данные из EditText в ExpandableListView? - PullRequest
0 голосов
/ 24 февраля 2019

Я начинающий разработчик Android, и у меня проблема с textData в EditText из Expandable ListView;

Итак, я использую SimpleExpandableListViewAdapter.В пользовательском childLayout у меня есть EditText, который использует данные из базы данных в виде текста.В основной активности пользователь может изменить данные, а затем он нажимает кнопку «Применить изменения».Но в button.OnClickListener я могу получить listView EditTexts из значения адаптера, которые не изменены.Таким образом, каждый раз, когда listView отображает одни и те же данные.

Я имею в виду, EditText.getText () возвращает старые данные;

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

Вопрос в том, как получить текущий текст EditText в Expandable ListView?Есть ли способ получить каждое значение EditText без указателя адаптера?

Извините, я не могу поделиться всем своим кодом, но это корень моей проблемы:

Этот код не работает:

TimersExpandableListView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {  
            Log.w("editText", "focus changed");  
            DailyTimersTemperatureEditText = v.findViewById(R.id.timers_daily_child_degrees_editText);

            DailyTimersTemperatureEditText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    String newTemperature = DailyTimersTemperatureEditText.getText().toString();
                    Log.w("new temp", newTemperature);
                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });
        }
    });

"Фокус изменен"там, но журнал «Новая температура» не отображается.

Вот мой адаптер:

 final SimpleExpandableListAdapter DailyTimersListAdapter = new 
 SimpleExpandableListAdapter(context, // this.getContext();
            DailyGroupDataList,
            R.layout.timers_daily_list_parent_layout,
            DailyGroupFrom, GroupDailyTo, //Array of Hashmaps, ParentLayout Array;
            NightAndDayChildData, R.layout.timers_daily_list_child_layout,
            new String[]{"DayAndNightChildTime", "DayAndNightTemp"},
            new int[]{R.id.timers_daily_child_time_textView, R.id.timers_daily_child_degrees_editText}
    );
    TimersExpandableListView.setAdapter(DailyTimersListAdapter);

Спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

Вы устанавливаете «Фокус изменен» для ExpandableListView , а не для EditText.

Попробуйте расширить адаптер для переопределения getChildView () и найдите EditText, например:

    final SimpleExpandableListAdapter DailyTimersListAdapter = new
            SimpleExpandableListAdapter(context, // this.getContext();
            DailyGroupDataList,
            R.layout.timers_daily_list_parent_layout,
            DailyGroupFrom, GroupDailyTo, //Array of Hashmaps, ParentLayout Array;
            NightAndDayChildData, R.layout.timers_daily_list_child_layout,
            new String[]{"DayAndNightChildTime", "DayAndNightTemp"},
            new int[]{R.id.timers_daily_child_time_textView, R.id.timers_daily_child_degrees_editText}
    ){
        @Override
        public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            View childView = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
            EditText DailyTimersTemperatureEditText = childView.findViewById(R.id.timers_daily_child_degrees_editText);
            DailyTimersTemperatureEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean b) {
                    if(!b){
                        Log.w("new temp pos", "Save data, group: " + groupPosition + ", child: " + childPosition);
                        String newTemperature = ((EditText)view).getText().toString();
                        Log.w("new temp data", newTemperature);

                        // Code to save the new data.

                    }
                }
            });
            return childView;
        }
    };

Надеюсь, это поможет!

...