我正在尝试为我的 Android 应用程序构建一个小部件,但遇到了这样的问题:虽然 ListView确实找到了数据(通过调试器,我可以看到 RemoteViewFactory 实现中的 getViewAt 方法被调用并返回正确的 RemoteViews),找到的每个条目都在我的小部件中简单地显示为“正在加载...”
郑重声明:在我的数据库中确实找到了 4 个条目,并且 getViewAt 方法被调用四次,每次都返回一个正确的列表项。
我的代码基于Android 文档,并使用StackView 示例作为技术参考。
在尝试解决这个问题时,我查阅了 stackoverflow 并发现了一些过去的 问题。最常见的修复建议是:
我已尝试了上面的所有建议,并且仅使用支持的视图,但我的项目仍然没有显示。这里有人有想法吗?
我编写的相关代码列表:
添加到我的 AndroidManifest.xml 文件中的条目
<service
android:name=".widget.DfdWidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS" />
<receiver android:name=".widget.DfdWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/dfd_widget_info" />
</receiver>
Run Code Online (Sandbox Code Playgroud)
小部件布局 xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80DDE8ED"
android:padding="@dimen/widget_margin">
<ListView
android:id="@+id/widgetRemindersListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/dfd_widget_list_item">
</ListView>
<TextView
android:id="@+id/widgetEmptyViewText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="You have …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ListView为我的应用程序实现一个小部件.
为此,我逐步完成了以下所有链接:
但是,当我将小部件放在主屏幕上时,列表项的数量确实与我在数据库中的项目数相匹配,但每行的视图不会更新并继续显示"正在加载..."(如图所示)这个屏幕截图)
我不明白缺少什么.
非常感谢您的帮助!
这是我的AppWidgetProvider:
package com.appro.illbeback;
import com.appro.illbeback.R;
import com.appro.illbeback.data.CallsDataSrouce;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;
public class CallsAppWidgetProvider extends AppWidgetProvider {
private CallsDataSrouce dataSource;
@SuppressWarnings("deprecation")
@Override
public void onUpdate(Context context, AppWidgetManager
appWidgetManager,int[] appWidgetIds) {
dataSource = new CallsDataSrouce(context);
dataSource.open();
for (int i = 0; i < appWidgetIds.length; i++) {
Intent serviceIntent = new Intent(context, WidgetService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
// Which …Run Code Online (Sandbox Code Playgroud)