ViewModel 方法不会在每次调用 onCreate 方法时调用
ViewModel method does not call every time onCreate method is called
我的应用程序从 API 获取数据并使用食品类别图像和名称填充回收站视图。当我单击任何图像时,另一个 activity 将打开,第二个 activity 将显示该类别的食物列表。但是当我打开任何类别时它第一次工作但是如果我按下返回或向上按钮回到 MainAcivity 并点击任何其他类别然后第二个 activity 上的食物不会改变(ViewModel 的方法没有被调用)。
查看 GitHub 上的完整代码:https://github.com/harshabhadra/Foodie/tree/master/app/src/main
这是MainAcivity的onClick方法。我通过 Intent 发送类别名称:
@Override
public void onItemClick(int item) {
Intent categoryIntent = new Intent(MainActivity.this,
CategoryActivity.class);
categoryIntent.putExtra("name", foodAdapter.getFood(item));
startActivity(categoryIntent);
}
这是我的第二个Activity:
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();
}
}
});
当我在 MainAcivity 中点击该类别时,我希望在第二个 Activity 中看到不同的食物列表。
发生的事情是,当 categoryData
为空时,即您在存储库中调用 loadData(category)
,即它第一次运行。之后它 returns 相同的实时数据而不加载新的类别数据。
您只需要将 loadData
移到 if 之外。或者你实际上可以做的是懒惰地初始化 categoryData
并摆脱 if
.
我的应用程序从 API 获取数据并使用食品类别图像和名称填充回收站视图。当我单击任何图像时,另一个 activity 将打开,第二个 activity 将显示该类别的食物列表。但是当我打开任何类别时它第一次工作但是如果我按下返回或向上按钮回到 MainAcivity 并点击任何其他类别然后第二个 activity 上的食物不会改变(ViewModel 的方法没有被调用)。
查看 GitHub 上的完整代码:https://github.com/harshabhadra/Foodie/tree/master/app/src/main
这是MainAcivity的onClick方法。我通过 Intent 发送类别名称:
@Override
public void onItemClick(int item) {
Intent categoryIntent = new Intent(MainActivity.this,
CategoryActivity.class);
categoryIntent.putExtra("name", foodAdapter.getFood(item));
startActivity(categoryIntent);
}
这是我的第二个Activity:
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();
}
}
});
当我在 MainAcivity 中点击该类别时,我希望在第二个 Activity 中看到不同的食物列表。
发生的事情是,当 categoryData
为空时,即您在存储库中调用 loadData(category)
,即它第一次运行。之后它 returns 相同的实时数据而不加载新的类别数据。
您只需要将 loadData
移到 if 之外。或者你实际上可以做的是懒惰地初始化 categoryData
并摆脱 if
.