Android 远程视图更新问题

Android 远程视图更新问题,android,android-appwidget,Android,Android Appwidget,我从用户那里获取数据并存储到数据库中。我的数据库只接受一个值。因此,每次用户进入数据库时,数据库都会更新。我在AppWidget的textview中显示这些数据。为此,我使用以下代码: public void onUpdate(Context context, android.appwidget.AppWidgetManager appWidgetManager, int[] appWidgetIds) { //Get all ids ComponentName thisWid

我从用户那里获取数据并存储到数据库中。我的数据库只接受一个值。因此,每次用户进入数据库时,数据库都会更新。我在AppWidget的textview中显示这些数据。为此,我使用以下代码:

public void onUpdate(Context context, android.appwidget.AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    //Get all ids
    ComponentName thisWidget = new ComponentName(context.getPackageName(),SmsSchedulerWidget.class.getName());

    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);


    //the datas to be shown are fetched from the database
    DatabaseManager dbManager = new DatabaseManager(context);
    dbManager.open();
    contactNumber = dbManager.fetchContactNumber();
    Log.i("contactNumber",contactNumber);
    date = dbManager.fetchDate();
    Log.i("date",date);
    message = dbManager.fetchMessage();
    Log.i("message",message);
    status = dbManager.fetchStatus();
    Log.i("status", status);
    dbManager.closeDatabase();
    //Build the intent to call the service

    //it creates the UI for the given app widget
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.schdulesms_appwidget_layout);


    remoteViews.setTextViewText(R.id.to_appwidget_saved_data,
            contactNumber);
    remoteViews.setTextViewText(R.id.date_appwidget_saved_data, date);
    remoteViews.setTextViewText(R.id.status_appwidget_saved, status);
    remoteViews.setTextViewText(R.id.message_appwidgset_saved_data,
            message);

    //to start the activity with the click on the layout
    Intent clickIntent = new Intent(context.getApplicationContext(),MainActivity.class);
    clickIntent.setFlags(clickIntent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent= PendingIntent.getActivity(context, 0, clickIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.full_widget, pendingIntent);

    //to update the BroadCast Receiver so that it holds the current values in the layout
    Intent updateIntent =new Intent(context,SmsSchedulerWidget.class);

    updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    updateIntent.setComponent(thisWidget);

    PendingIntent pendingIntentForUpdate = PendingIntent.getBroadcast(context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.logoBtn, pendingIntentForUpdate);

    appWidgetManager.updateAppWidget(thisWidget, remoteViews);

    }

“我的应用程序小部件”应在单击按钮后以及用户在运行时向数据库中输入新值后自动更新。但“应用程序小部件”仅在从屏幕上卸载并再次安装或重新运行程序后自动更新。为什么会发生这种情况?如何在点击按钮后更新我的应用程序小部件?

要手动更新你的
应用程序小部件
,你必须向它发送
广播
,并在你的
应用程序WidgetProvider
接收()方法中接收它。从
onReceive()
中,您应该从广播
Intent
中提取所需的所有值,然后手动调用
onUpdate()
方法。希望这能有所帮助。

要手动更新您的
AppWidget
,您必须向其发送
广播
,并通过
AppWidgetProvider
onReceive()
方法接收。从
onReceive()
中,您应该从广播
Intent
中提取所需的所有值,然后手动调用
onUpdate()
方法。希望这能有所帮助。

我不知道我是否正确,但扩展AppWidgetProvider的接收器在我尝试覆盖onReceive时显示错误……因此,如果您可以通过演示或示例程序代码详细说明您的答案,那么我将更容易实现it@prativa,这里有一个关于这个主题的不错的教程:。这里使用的方法与我建议的有点不同,但也应该有效。我已经在AppWidgetProvider的onReceive()中发送并接收了广播,然后从onReceive()调用onUpdate()它的工作非常出色…但是这个过程创建了AndroidAppWidget类的两个对象。我不知道我是否正确,但是扩展AppWidgetProvider的接收器在我尝试覆盖onReceive时显示了一个错误…因此,如果你能通过演示或示例程序代码详细说明你的答案,那么我就更容易理解了实施it@prativa,这里有一个关于这个主题的不错的教程:。这里使用的方法与我提出的有点不同,但也应该有效。我已经在AppWidgetProvider的onReceive()中发送了一个广播并接收了它,然后从onReceive()调用onUpdate(),它的工作非常出色……但是这个过程创建了AndroidAppWidget类的两个对象。