简体   繁体   English

主屏幕小部件文本视图未更新

[英]home screen widget text view not updating

This is the code of my program - 这是我程序的代码-

package com.nadeem.todos;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.RemoteViews;

public class todo_widget extends AppWidgetProvider {
private SQLiteDatabase db;
private TodoSQLiteHelper dbHelper;
String[] widget_title = { "", "", "", "", "", "" };
String[] widget_content = { "", "", "", "", "", "" };
public static String ACTION_WIDGET_REFRESH = "ActionReceiverRefresh";
public static String ACTION_WIDGET_OPEN = "ActionReceiverOpen";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    Intent intent = new Intent(context, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

    RemoteViews views = new RemoteViews(context.getPackageName(),
            R.layout.widget_layout);
    views.setOnClickPendingIntent(R.id.contentw2, pendingIntent);
    views.setOnClickPendingIntent(R.id.contentw3, pendingIntent);
    Intent i1 = new Intent(context, todo_widget.class);
    i1.setAction(ACTION_WIDGET_REFRESH);

    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i1,
            PendingIntent.FLAG_UPDATE_CURRENT);
    views.setOnClickPendingIntent(R.id.flip, pi);
    views.setOnClickPendingIntent(R.id.contentw1, pi);
    appWidgetManager.updateAppWidget(appWidgetIds, views);
}

@Override
public void onReceive(Context context, Intent intent) {
    AppWidgetManager appWidgetManager = AppWidgetManager
            .getInstance(context);

    int[] ids = AppWidgetManager.getInstance(context).getAppWidgetIds(
            new ComponentName(context, todo_widget.class));
    RemoteViews views = new RemoteViews(context.getPackageName(),
            R.layout.widget_layout);
    if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) {
        views.setTextViewText(R.id.titlew1, widget_title[3]);
        views.setTextViewText(R.id.contentw1, widget_content[3]);
        appWidgetManager.updateAppWidget(ids, views);

    } else if (intent.getAction().equals(
            AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
        dbHelper = new TodoSQLiteHelper(context);
        db = dbHelper.getWritableDatabase();
        String[] tableColumns = new String[] { "_id", "title", "todo" };

        int j = 0;

        Cursor cursor = db.query("todos", tableColumns, null, null, null,
                null, null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {

            if (j < 6) {
                widget_title[j] = cursor.getString(1);
                widget_content[j] = cursor.getString(2);
            }
            j++;

            cursor.moveToNext();
        }
        db.close();
        final int N = ids.length;
        for (int i = 0; i < N; i++) {
            int appWidgetId = ids[i];
            views.setTextViewText(R.id.titlew1, widget_title[0]);
            views.setTextViewText(R.id.titlew2, widget_title[1]);
            views.setTextViewText(R.id.titlew3, widget_title[2]);
            views.setTextViewText(R.id.contentw1, widget_content[0]);
            views.setTextViewText(R.id.contentw2, widget_content[1]);
            views.setTextViewText(R.id.contentw3, widget_content[2]);
            appWidgetManager.updateAppWidget(appWidgetId, views);

        }
    }
    super.onReceive(context, intent);
}
    }

My problem is that the text view in onRecieve method does not get updated when the Action_widget_refresh is true. 我的问题是,当Action_widget_refresh为true时,onRecieve方法中的文本视图不会更新。 I have set a pending intent on a text view so that when it is clicked the text of the text view (R.id.content1) changes. 我已经在文本视图上设置了一个待处理的意图,以便单击它时,文本视图(R.id.content1)的文本会更改。 But when i click on the text view the text view dissappears. 但是,当我单击文本视图时,该文本视图消失了。 i have no idea why this is happening. 我不知道为什么会这样。 Other than that the code works fine. 除此之外,该代码还可以正常工作。

I think you should be doing: 我认为您应该这样做:

if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) {
    views.setTextViewText(R.id.titlew1, widget_title[3]);
    views.setTextViewText(R.id.contentw1, widget_content[3]);
    final int N = ids.length;
    for (int i = 0; i < N; i++) {
        int appWidgetId = ids[i];
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

Every time you call appWidgetManager.updateAppWidget() , the RemoveViews you pass in needs to "contain a complete representation of the widget". 每次调用appWidgetManager.updateAppWidget() ,传入的RemoveViews都必须“包含窗口小部件的完整表示形式”。 That means you need to set the text for your TextViews every time, not just when the text should change. 这意味着您需要每次都为TextViews设置文本,而不仅仅是更改文本的时间。 By only setting the text that changes, you're losing the text that you want to remain the same. 通过仅设置要更改的文本,您将丢失想要保持不变的文本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM