Im trying to make it so that on a press of a image button on my widget it will change the text of a textview. This textviews data is a random string from a array (Something i already have code for). I started to have a look at a broadcast reciever but i really dont know why mine isnt working. Any help is really appreciated 🙂
Widget activity
public class Widget extends AppWidgetProvider {
private Random rgenerator = new Random();
private Random rgenerator2 = new Random();
private String[] myString1;
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Resources res = context.getResources();
myString1 = res.getStringArray(R.array.myArray);
final int N = appWidgetIds.length;
Log.i("ExampleWidget", "Updating widgets " + Arrays.asList(appWidgetIds));
// Perform this loop procedure for each App Widget that belongs to this
// provider
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch ExampleActivity
Intent intent = new Intent();
intent.setAction(TestReceiver.TEST_INTENT);
intent.setClassName(TestReceiver.class.getPackage().getName(), TestReceiver.class.getName());
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
views.setOnClickPendingIntent(R.id.imagewidgeterica, pendingIntent);
// To update a label
views.setTextViewText(R.id.widget1label , myString1[rgenerator.nextInt(myString1.length)]);
// Tell the AppWidgetManager to perform an update on the current app
// widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
Broadcast reciver:
package kevin.erica.box;
public class TestReceiver extends BroadcastReceiver {
private Random rgenerator = new Random();
private Random rgenerator2 = new Random();
private String [] myString1;
private String myStringRandom = myString1[rgenerator.nextInt(myString1.length)];
public static final String TEST_INTENT= "MyTestIntent";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context, "Test", Toast.LENGTH_SHORT);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext());
Toast.makeText(context, "Test", Toast.LENGTH_SHORT).show();
int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
rViews.setTextViewText(R.id.widget1label, "someupdateddata");
appWidgetManager.updateAppWidget(appWidgetIds, rViews);
}
}
If the ImageButton and TextView are both in the same layout, then BroadcastReceiver is probably overkill.
Have you tried something like this in your Activity:
http://developer.android.com/reference/android/view/View.OnClickListener.html