Метод ViewModel не вызывается каждый раз, когда вызывается метод onCreate - PullRequest
0 голосов
/ 02 июля 2019

Мое приложение извлекает данные из API и заполняет представление переработчика изображением и названием категории продуктов питания. Когда я нажимаю на любое изображение, открывается другое действие, а второе показывает список продуктов этой категории. Но когда я открываю какую-либо категорию, она работает впервые, но если я нажму кнопку «Назад» или кнопку «Вверх», вернусь к MainAcctivity и нажму на любую другую категорию, тогда продукты питания во втором действии не изменятся (метод ViewModel не вызывается ).

См. Полный код на GitHub: https://github.com/harshabhadra/Foodie/tree/master/app/src/main

Это метод onClick от MainAcctivity. Я отправляю название категории через Intent:

@Override
public void onItemClick(int item) {

    Intent categoryIntent = new Intent(MainActivity.this, 
    CategoryActivity.class);
    categoryIntent.putExtra("name", foodAdapter.getFood(item));
    startActivity(categoryIntent);
}

Это моя вторая активность:

Intent intent = getIntent();
Food food = intent.getParcelableExtra("name");
category = food.getFoodName();
setTitle(category);

foodViewModel = ViewModelProviders.of(this).get(FoodViewModel.class);
foodViewModel.getFoodCategory(category).observe(this, new 
Observer<List<FoodCategory>>() {
        @Override
        public void onChanged(List<FoodCategory> foodCategories) {
            if (!foodCategories.isEmpty()) {

                progressBar.setVisibility(View.GONE);
                categoryAdapter = new 
CategoryAdapter(CategoryActivity.this, foodCategories);
                recyclerView.setAdapter(categoryAdapter);

                Log.e(TAG, "Category Name: " + category);
            }else {
                Toast.makeText(CategoryActivity.this, "empty list", 
Toast.LENGTH_SHORT).show();
    }
   }
});

Я ожидаю увидеть другой список продуктов во Втором занятии в зависимости от категории, когда я нажму на эту категорию в MainAcctivity.

1 Ответ

0 голосов
/ 02 июля 2019

Происходит то, что вы звоните loadData(category) в своем хранилище, когда categoryData равно нулю, то есть при первом запуске.После этого он возвращает те же жизненные данные без загрузки данных новой категории.

Вам просто нужно переместить loadData за пределы if.Или то, что вы могли бы на самом деле сделать, это лениво инициализировать categoryData и избавиться от if.

...