如何从ExpandableListView中的EditText获取更新的数据?

时间:2019-02-24 12:49:30

标签: android listview android-edittext expandablelistview

我是一名初学者Android开发人员,并且在Expandable ListView的EditText中遇到textData问题;

因此,我正在使用SimpleExpandableListViewAdapter。在自定义childLayout中,我有一个EditText,它使用来自数据库的数据作为文本。在主要活动中,用户可以更改数据,然后按“应用更改”按钮。但是在button.OnClickListener中,我可以从adapterValues获取listView EditTexts,但不会更改。因此,每次listView显示相同的数据。

我的意思是,EditText.getText()给了我旧数据;

每次按下按钮时,我都需要更新适配器,但是我没有新数据。

问题是,如何在Expandable ListView中获取当前的EditText文本?有没有一种方法,无需适配器指针就可以获取每个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 :(得分:0)

您要为 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;
        }
    };

希望有帮助!