Nauman Aslam
Nauman Aslam

Reputation: 299

Widget update via remoteview Android

I want my activity "but1" to update the text on my widget button through button in my but1 activity. I've tried and it shows no error but still the widget doesn't updates. Is it something Im missing in manifest file?Moreover the log cat also doesnt show any problem following is my code in But1.class

et1.setOnClickListener(new OnClickListener() {

    Intent in=new Intent();

            Bundle extras=in.getExtras();


            if(extras!=null)
            {
                awID=extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
            }
                aw=AppWidgetManager.getInstance(context);
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub



                    RemoteViews rv=new RemoteViews(context.getPackageName(),R.layout.activity_main);
                    rv.setTextViewText(R.id.button1, "Mughazf,f,jvnl");
                    aw.updateAppWidget(awID, rv);
                    Intent result=new Intent();
                    result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
                    setResult(RESULT_OK,r

esult);

and my widget is:

@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        super.onUpdate(context, appWidgetManager, appWidgetIds);

        final int N = appWidgetIds.length;

        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

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


           RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main);
            views.setOnClickPendingIntent(R.id.button2, pendingIntent);

 appWidgetManager.updateAppWidget(appWidgetId, views);


        }
    }

}

Upvotes: 1

Views: 3993

Answers (1)

Libin
Libin

Reputation: 17085

Problem should be with the Widget App ID . You need to keep remembering the Widget ID to update it later.

Your Widget Provider onUpdate() method should store the Widget id in shared preference or database

I am using shared preference here,

 SharedPreferences prefs = context.getSharedPreferences("private preference", Context.MODE_PRIVATE);
 // here i am saving one widget id. change your logic to store all the widget id's
 prefs.edit().putInt("WidgetId",appWidgetId).commit();

Then when the Activity is launched and button clicked. You can update the widget layout like this

First Read the Widget ID from shared Preference

 SharedPreferences prefs = getSharedPreferences("private preference", Context.MODE_PRIVATE);
 int awID = prefs.getInt("WidgetId", AppWidgetManager.INVALID_APPWIDGET_ID);

Then, create the instance of RemoteView and set the new text to the TextView

 RemoteViews rv=new RemoteViews(getPackageName(),R.layout.widget_layout);
 rv.setTextViewText(R.id.textView1, "Some one updated Me");

Then , get the instance of AppWidget Manager

  AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());

And, Finally update the Widget with new RemoteView Layout.

  appWidgetManager.updateAppWidget(awID, rv);

So, awID - is the Widget Id what we got from onUpdate method.

This should work. Let me know if you see any issue.

Upvotes: 4

Related Questions