按返回后重新加载图像
Reload image after pressing back
我有两个 Activity,A 和 B。当用户按下 A 中的按钮时,B 启动并使用 Picasso 加载图像。
Example A to B
当用户按下返回键,然后再次按下 A 中的按钮时,B 显示相同的图像。
我想重新加载 B 中的图像以显示不同的图像。
A to B image reloaded after pressing back
如何重新加载它?我正在考虑将 B 中的图像加载代码从 onCreate()
移动到 onRestart()
或 onResume()
。这是正确的想法吗?
按钮:
val goButton = findViewById<Button>(R.id.btn_go)
goButton.setOnClickListener {
val intent = Intent(this, WritingActivity::class.java)
startActivity(intent)
}
加载图片:
private const val RAND_IMAGE_URL:String = "https://images.unsplash.com/photo-1617386564901-be7cfcaa4c60?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=800&ixlib=rb-1.2.1&q=80&w=800"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_writing)
// Load the random image
val image = findViewById<ImageView>(R.id.iv_image)
Picasso.get().load(RAND_IMAGE_URL)
.error(R.drawable.ic_error_outline_72)
.into(image, object : Callback {
override fun onSuccess() {
// successfully loaded, start countdown timer
startTimer()
// hide progress bar
progressBar.visibility = View.GONE
}
override fun onError(e: Exception?) {
// display error message
Toast.makeText(this@WritingActivity, R.string.error_loading_image, Toast.LENGTH_LONG).show()
Log.e(TAG, "error loading image", e)
// hide progress bar
progressBar.visibility = View.GONE
}
})
}
我认为您不需要在 onCreate 函数中移动代码。
当你按下后退按钮时,B activity 生命周期已经处于停止状态。
这就是为什么当你再次按下 A 中的按钮时,它会再次调用 onCreate 函数。
我认为需要在每个生命周期中生成随机图像 url。
谢谢
仅将 Picasso 代码移至 onResume()
当您通过浏览器访问此 URL 时,它会进行一些处理并每次向您显示随机图像。
但是对于 Picasso,Picasso 在从服务器获取它之前首先检查它的缓存内存与相同的 URL。由于 URL 是常量,它将向您显示首先获取的相同图像。
在这种情况下,您可以清除 Picasso 的缓存或请求 Picasso 为此 URL 加载新图像。
Picasso.with(this)
.load(URL).skipMemoryCache().into(YOUR_IMAGE_VIEW);
我有两个 Activity,A 和 B。当用户按下 A 中的按钮时,B 启动并使用 Picasso 加载图像。
Example A to B
当用户按下返回键,然后再次按下 A 中的按钮时,B 显示相同的图像。
我想重新加载 B 中的图像以显示不同的图像。
A to B image reloaded after pressing back
如何重新加载它?我正在考虑将 B 中的图像加载代码从 onCreate()
移动到 onRestart()
或 onResume()
。这是正确的想法吗?
按钮:
val goButton = findViewById<Button>(R.id.btn_go)
goButton.setOnClickListener {
val intent = Intent(this, WritingActivity::class.java)
startActivity(intent)
}
加载图片:
private const val RAND_IMAGE_URL:String = "https://images.unsplash.com/photo-1617386564901-be7cfcaa4c60?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=800&ixlib=rb-1.2.1&q=80&w=800"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_writing)
// Load the random image
val image = findViewById<ImageView>(R.id.iv_image)
Picasso.get().load(RAND_IMAGE_URL)
.error(R.drawable.ic_error_outline_72)
.into(image, object : Callback {
override fun onSuccess() {
// successfully loaded, start countdown timer
startTimer()
// hide progress bar
progressBar.visibility = View.GONE
}
override fun onError(e: Exception?) {
// display error message
Toast.makeText(this@WritingActivity, R.string.error_loading_image, Toast.LENGTH_LONG).show()
Log.e(TAG, "error loading image", e)
// hide progress bar
progressBar.visibility = View.GONE
}
})
}
我认为您不需要在 onCreate 函数中移动代码。 当你按下后退按钮时,B activity 生命周期已经处于停止状态。 这就是为什么当你再次按下 A 中的按钮时,它会再次调用 onCreate 函数。 我认为需要在每个生命周期中生成随机图像 url。 谢谢
仅将 Picasso 代码移至 onResume()
当您通过浏览器访问此 URL 时,它会进行一些处理并每次向您显示随机图像。
但是对于 Picasso,Picasso 在从服务器获取它之前首先检查它的缓存内存与相同的 URL。由于 URL 是常量,它将向您显示首先获取的相同图像。
在这种情况下,您可以清除 Picasso 的缓存或请求 Picasso 为此 URL 加载新图像。
Picasso.with(this)
.load(URL).skipMemoryCache().into(YOUR_IMAGE_VIEW);