Как обновить TextView, в котором хранится среднее значение списка - PullRequest
1 голос
/ 02 марта 2012

У меня есть активность Android, которая состоит из представления списка и просмотра текста.Текстовое представление отображает информацию о суммированном содержимом представления списка, если элементы в представлении списка обновляются, тогда текстовое представление должно отражать изменение.

Вроде как шаблон наблюдателя, но с отражением одного компонентаизменения, а не наоборот.

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

Следующий метод заполняет TextView, поэтому мне нужно вызвать его снова из SeekBar onStopTrackingProgress Listener.

private void populateOverviewText() {
TextView overview = (TextView) findViewById(R.id.TaskOverview);

if (!taskArrayList.isEmpty()) {

    int completion = 0;
    try {
    completion = taskHandler.getProjectCompletion();
    overview.setText("Project Completion = " + completion);
    } catch (ProjectManagementException e) {
    Log.d("Exception getting Tasks List from project",
        e.getMessage());
    }
}

}

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

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Использование DataSetObserver

Я искал решение, которое не включало бы изменение кода адаптера, чтобы адаптер можно было использовать повторно в других ситуациях.

Я получил это с помощью DataSetObserver

Код для создания Observer невероятно прост, я просто добавляю вызов метода, который обновляет TextView внутри метода onChanged ().

Присоединение Observer (добавлено в список отображения Activity))

    final TaskAdapter taskAdapter = new TaskAdapter(this, R.id.list, taskArrayList);

    /* Observer */
    final DataSetObserver observer = new DataSetObserver() {
        @Override
        public void onChanged() {
            populateOverviewText();
        }
    };

    taskAdapter.registerDataSetObserver(observer);

Использование метода OnChanged (добавлен в прослушиватель SeekBar внутри адаптера)

    public void onStopTrackingTouch(SeekBar seekBar) {
    int progress = seekBar.getProgress();
    int task_id = (Integer) seekBar.getTag();

    TaskHandler taskHandler = new TaskHandler(DBAdapter
        .getDBAdapterInstance(getContext()));

    taskHandler.updateTaskProgress(task_id, progress);

    mList.get(position).setProgress(progress);


    //need to fire an update to the activity
    notifyDataSetChanged();

    }
1 голос
/ 02 марта 2012

Либо используйте этот метод public

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

...