Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to call onUpdate() in AppWidgetProvider?

this is my code...

String[] show = new String[2];
RemoteViews remoteViews;
public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";   

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

    remoteViews = new RemoteViews( context.getPackageName(), R.layout.widget );
    remoteViews.setTextViewText( R.id.widget_title, show[0]);
    remoteViews.setTextViewText( R.id.widget_textview, show[1]);

    Intent configIntent = new Intent(context, SuitAuto.class);
    configIntent.setAction(ACTION_WIDGET_CONFIGURE);

    Intent active = new Intent(context, WordWidget.class);
    active.setAction(ACTION_WIDGET_RECEIVER);
    active.putExtra("msg", "Message for Button 1");

    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);

    remoteViews.setOnClickPendingIntent(R.id.update, actionPendingIntent);
    remoteViews.setOnClickPendingIntent(R.id.Lilo, configPendingIntent);

    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews );
}

private String[] getString() {
    String[] hon = new String[2];
    KamusWidget ad = new KamusWidget(null);
    ad.open();
    hon = ad.getwordday();
    ad.close();
    return hon;
}

@Override
public void onReceive(Context context, Intent intent) {
    // v1.5 fix that doesn't call onDelete Action
    final String action = intent.getAction();
    if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
        final int appWidgetId = intent.getExtras().getInt(
                AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);

        if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
            this.onDeleted(context, new int[] { appWidgetId });
        }
    } else {
        // check, if our Action was called
        if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
            String msg = "null";
            try {
                msg = intent.getStringExtra("msg");
            } catch (NullPointerException e) {
                Log.e("Error", "msg = null");
            }
            Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();


        } else {
            // do nothing
        }

        super.onReceive(context, intent);
    }
}

 }

i just want to update widget_title and widget_textview when R.id.update is clicked it should run function getString to fetch string from other class so that, the new string can be pass to the textview...

any idea?

like image 800
user724861 Avatar asked Oct 10 '22 16:10

user724861


1 Answers

In the end of the onReceive function you should be able to just create a RemoteView and update the widget:

ComponentName name = new ComponentName(context, WordWidget.class);
int[] ids = appWidgetManager.getAppWidgetIds(name);
if(ids != null && ids.length > 0){
RemoteView remoteViews = new RemoteViews( context.getPackageName(), R.layout.widget );
remoteViews.setTextViewText( R.id.widget_title, context.getString(R.id.new_widget_title));
remoteViews.setTextViewText( R.id.widget_textview, context.getString(R.id.new_widget_text));

Intent configIntent = new Intent(context, SuitAuto.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);

Intent active = new Intent(context, WordWidget.class);
active.setAction(ACTION_WIDGET_RECEIVER);
active.putExtra("msg", "Message for Button 1");

PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);

remoteViews.setOnClickPendingIntent(R.id.update, actionPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.Lilo, configPendingIntent);

appWidgetManager.updateAppWidget(ids, remoteViews );
}

I believe you will need to also set the Intents: if you do not do that the buttons will no longer work once you update the RemoteView.

like image 77
Femi Avatar answered Oct 14 '22 02:10

Femi