Задать вопрос
@sam750
Программист

Почему не обновляется ListActivity по notifyDataSetChanged?

Добрый день!
Вроде простенькая программа, но после выбора даты в диалоге, данные на ListActivity не обновляются.
А если еще раз вызвать обработчик onClick, нажатием на поле, то, еще до появления экрана диалога, данные обновятся.
Вызов обновления изначально был в onListItemClick, если что.

public class MainActivity extends ListActivity {
    int DIALOG_DATE = 1;
    int myYear;
    int myMonth;
    int myDay;
    ArrayAdapter<String> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SimpleDateFormat curFormat = new SimpleDateFormat("dd.MM.yyyy");
        Date[] idate52 = new Date[8];
        String[] idateString52 = new String[8];
        Date[] date52 = idate52;
        String[] dateString52 = idateString52;
        mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);

        GregorianCalendar vCalendar = new GregorianCalendar();
        date52[0] = vCalendar.getTime();
        myYear = vCalendar.get(vCalendar.YEAR);
        myMonth = vCalendar.get(vCalendar.MONTH);
        myDay = vCalendar.get(vCalendar.DAY_OF_MONTH);
        dateString52[0] = curFormat.format(date52[0]).toString();
        mAdapter.add(dateString52[0]);
        vCalendar.setTime(date52[0]);
        for (int i = 1; i < 8; i++) {
            vCalendar.add(vCalendar.DAY_OF_MONTH, -52);
            date52[i] = vCalendar.getTime();
            vCalendar.setTime(date52[i]);
            dateString52[i] = curFormat.format(date52[i]).toString();
            mAdapter.add(dateString52[i]);
        };
        setListAdapter(mAdapter);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        if (position == 0) {
            showDialog(DIALOG_DATE);
            reCalc();
        }
    }

    protected Dialog onCreateDialog(int id){
        if (id == DIALOG_DATE ) {
          DatePickerDialog gDPD = new DatePickerDialog(this, myCallBack, myYear, myMonth, myDay );
          return gDPD;
        }
        return super.onCreateDialog(id);
    }

    protected void reCalc () {

        SimpleDateFormat curFormat = new SimpleDateFormat("dd.MM.yyyy");

        Date[] date52 = new Date[8];
        String[] dateString52 = new String[8];

        GregorianCalendar vCalendar = new GregorianCalendar();
        vCalendar.set(myYear, myMonth, myDay);

        date52[0] = vCalendar.getTime();
        dateString52[0] = curFormat.format(date52[0]).toString();
        vCalendar.setTime(date52[0]);
        mAdapter.clear();
        mAdapter.add(dateString52[0]);
        for (int i = 1; i < 8; i++) {
            vCalendar.add(vCalendar.DAY_OF_MONTH, -52);
            date52[i] = vCalendar.getTime();
            vCalendar.setTime(date52[i]);
            dateString52[i] = curFormat.format(date52[i]).toString();
            mAdapter.add(dateString52[i]);
        };
//        mAdapter.addAll(dateString52);
        mAdapter.notifyDataSetChanged();
    }

    OnDateSetListener myCallBack = new OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            myYear = year;
            myMonth = month;
            myDay = dayOfMonth;
        }
    };
}
  • Вопрос задан
  • 52 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
RATlius
@RATlius
Разработчик Android
Если я правильно понял, у Вас метод reCalc() отвечает за обновление. Вызывается он только в методе onListItemClick(). Добавьте этот метод в обработчик кнопок Dialog
Покажите обработчик нажатия кнопок у Dialog
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы