這是我的小部件代碼
class MovieOfTheDayWidget : AppWidgetProvider() {
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray,
) {
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}
override fun onEnabled(context: Context) {
// Enter relevant functionality for when the first widget is created
}
override fun onDisabled(context: Context) {
// Enter relevant functionality for when the last widget is disabled
}
}
internal fun updateAppWidget(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetId: Int,
) {
val randomMovieList = Constants.getAllMovies()
val movie: AllMovies
val randomMovieListSize = randomMovieList.size
var randomPosition = Random().nextInt(randomMovieListSize)
movie = randomMovieList[randomPosition]
val idArray = arrayListOf<RemoteViews>()
// Construct the RemoteViews object
val movieName = RemoteViews(context.packageName, R.layout.movie_of_the_day_widget)
movieName.setTextViewText(R.id.seriesMovieNameAndYearWidget, "${movie.movieName} (${movie.date}")
val movieImg = RemoteViews(context.packageName, R.layout.movie_of_the_day_widget)
movieImg.setImageViewResource(R.id.seriesMovieImgWidget, movie.moviePic)
val movieRating = RemoteViews(context.packageName, R.layout.movie_of_the_day_widget)
movieRating.setTextViewText(R.id.seriesMovieRatingWidget, movie.rating)
idArray.add(movieName)
idArray.add(movieRating)
idArray.add(movieImg)
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, idArray[0])
appWidgetManager.updateAppWidget(appWidgetId, idArray[1])
appWidgetManager.updateAppWidget(appWidgetId, idArray[2])
}
但是最后 3 行不能正常作業,它們只有第二行有效,如何更新RemoteViews. idArray我試過把它放在一個 for 回圈和更新i中,但它也沒有用。updateAppWidget多次呼叫該函式甚至是正確的事情嗎?我嘗試將多個引數傳遞給函式,但它回傳了錯誤。
uj5u.com熱心網友回復:
你是對的,appWidgetManager.updateAppWidget()應該只呼叫一次。
您需要將所有更改應用到同一個RemoteViews實體,所以它應該是:
// Construct the RemoteViews object
val remoteViews = RemoteViews(context.packageName, R.layout.movie_of_the_day_widget)
remoteViews.setTextViewText(R.id.seriesMovieNameAndYearWidget, "${movie.movieName} (${movie.date}")
remoteViews.setImageViewResource(R.id.seriesMovieImgWidget, movie.moviePic)
remoteViews.setTextViewText(R.id.seriesMovieRatingWidget, movie.rating)
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, remoteViews)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/435784.html
