Reputation: 299
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
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