2012-02-16 16 views
1

私はボタンとして動作するはずのアンドロイドウィジェットを開発しました。ここで与えられた基本コードを使用しました:http://developer.android.com/guide/topics/appwidgets/index.html ボタンがクリックされると、アクティビティが開始されます。これは毎回うまく動作します!しかし、ボタンをクリックした時刻をログに記録すると、初めてのことしかできません。なぜこれが起こるのですか?ここでAndroidウィジェットonUpdate()

は私がのために頼まれたコードです:ステートメントをログ

public class ExampleAppWidgetProvider extends AppWidgetProvider { 

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 

    // Perform this loop procedure for each App Widget that belongs to this provider 
    for (int i=0; i<N; i++) { 
     int appWidgetId = appWidgetIds[i]; 
     Log.d("myButton","This is only called once.Why????????") 
     // Create an Intent to launch ExampleActivity 
     Intent intent = new Intent(context, ExampleActivity.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

     // Get the layout for the App Widget and attach an on-click listener 
     // to the button 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout); 
     views.setOnClickPendingIntent(R.id.button, pendingIntent); 

     // Tell the AppWidgetManager to perform an update on the current app widget 
     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 
} 

}

+0

これはお答えできませんあなたのコードを見てなければ。 –

+0

私はいくつかのコードを追加しました。私はすでに述べたように、それはちょうどアンドロイドのチュートリアルです – JustCurious

+0

アンドロイドのドキュメントは、色や同様のものを変更する機能を持っていません。ですから、あなたのコードはドキュメントと少し違っていて、なんらかの方法で根本的な原因になっていなければなりません。 –

答えて

0

ウィジェットのにonUpdate方法であり、そしてウィジェットが作成されたときにのみ、最初に呼び出され、ウィジェットのアップデート期間中。クリックしてログオンするには、次の2つのうちのいずれかを実行します。

A.があれば、ログなステートメントを実行するonReceiveメソッドを上書きして、ExampleActivityを開始し、その後、フラグでAppWidgetProviderを更新する保留中の意図を変更ExampleActivity

BののonCreateメソッド内のログ文を置きますフラグが存在します。たとえば、次のように

onReceive方法で次に
Intent intent = new Intent(context, ExampleAppWidgetProvider.class); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
intent.putExtra(SOME_FINAL_STRING, true); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    Bundle extras = intent.getExtras(); 

    if(AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action) && extras != null && extras.getBoolean(SOME_FINAL_STRING) == true){ 
     Log.d("myButton","Should no longer be called once!"); 
     Intent newIntent = new Intent(context, ExampleActivity.class); 
     newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(newIntent); 
    } else { 
     super.onReceive(context, intent); 
    } 
} 
関連する問題