0

ウィジェットの画像ボタンを押すと、テキストビューのテキストが変更されるようにしようとしています。この textviews データは、配列からのランダムな文字列です (既にコードを持っているもの)。放送受信機を見始めましたが、なぜ私のものが機能していないのか本当にわかりません。どんな助けでも本当に感謝しています:)

ウィジェット アクティビティ

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);


    }

}


         }

放送受信機:

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);


}



 }
4

1 に答える 1

0

ImageButton と TextView の両方が同じレイアウトにある場合、BroadcastReceiver はおそらくやり過ぎです。

アクティビティで次のようなことを試しましたか:

final Widget w = (Widget)findViewById(R.id.yourWidgetId);
ImageButton button = (ImageButton) findViewById(R.id.yourImageButtonId);

button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        w.onUpdate();
    }
}

http://developer.android.com/reference/android/view/View.OnClickListener.html

于 2012-05-05T15:44:20.093 に答える