На основании предоставленной вами информации я сделал следующие шаги, и моя наблюдаемая была запущена, как и ожидалось. Я думаю, что вы делаете что-то не так в хранилище или в классе, где вы обрабатываете преобразование. Поскольку кода для проверки недостаточно, я создал собственные фиктивные классы:
- Я создал фиктивную задачу. POJO:
public class Task {
private String id;
public Task(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@NonNull
@Override
public String toString() {
return "Task id is " +id;
}
}
- Я создал фиктивное хранилище с LiveData:
public class TasksRepository {
private List<Task> taskList = new ArrayList<>();
private MutableLiveData<List<Task>> _tasks = new MutableLiveData<>();
private LiveData<List<Task>> tasks = _tasks;
public TasksRepository() {
for (int i = 0; i < 5; i++) {
taskList.add(new Task(createTaskId()));
}
_tasks.setValue(taskList);
}
private String createTaskId() {
return UUID.randomUUID().toString();
}
public void addTask() {
taskList.add(new Task(createTaskId()));
_tasks.setValue(taskList);
}
public LiveData<List<Task>> getTasks() {
return tasks;
}
}
- Создан класс MyViewModel, который может обрабатывать преобразования. Во время преобразования мы просто добавляем префикс «TEST» к идентификатору задачи. Вы можете сравнить его с вашим кодом, и все должно быть в порядке:
public class MyViewModel {
private final LiveData<List<Task>> observableTasks;
public MyViewModel(TasksRepository tasksRepository) {
this.observableTasks = Transformations.map(tasksRepository.getTasks(), this::changeId);
}
private List<Task> changeId(List<Task> tasks) {
List<Task> resultTaks = new ArrayList<>();
for (Task task : tasks) {
String newId = "TASK" + task.getId();
task.setId(newId);
resultTaks.add(task);
}
return resultTaks;
}
public LiveData<List<Task>> getObservableTasks() {
return observableTasks;
}
}
- Добавить данные о нажатии кнопки и наблюдать за изменениями данных:
TasksRepository tasksRepository = new TasksRepository();
MyViewModel viewModel = new MyViewModel(tasksRepository);
button.setOnClickListener(v -> tasksRepository.addTask());
viewModel.getObservableTasks().observe(this,
tasks -> Log.d(TAG, Arrays.toString(new List[]{tasks})));