2015-02-07 61 views
1

首先抱歉我的英文不好個別待定意向的小窗口每個按鈕

我有使用意向服務做的作業AppWidget 我的應用程序部件有3個按鈕,如果用戶按每個按鈕去主要的活動,但與不同的ContentViews, 現在的問題是任何時間用戶點擊任何按鈕,它進入主要活動,但與第一個contentview,我的ID總是1; 這是我的代碼; 意圖服務

public static class ToggleService extends IntentService{ 
    public ToggleService(){ 
     super("AppWidget$ToggleService"); 
    } 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     // TODO Auto-generated method stub 
     ComponentName me = new ComponentName(this, AppWidget.class); 
     AppWidgetManager mgr = AppWidgetManager.getInstance(this); 
     mgr.updateAppWidget(me, buildUpdate(this)); 




    } 
    public RemoteViews buildUpdate(Context ctx){ 
     RemoteViews rmt = new RemoteViews(ctx.getPackageName(), R.layout.widget); 
     Intent i3 = new Intent(this,AppWidget.class); 
     i3.putExtra("ID", 3); 
     PendingIntent pi3 = PendingIntent.getBroadcast(ctx, 0, i3, 0); 
     Intent i1 = new Intent(this, AppWidget.class); 
     i1.putExtra("ID", 1); 
     PendingIntent pi1 = PendingIntent.getBroadcast(ctx, 0, i1, 0); 
     Intent i2 = new Intent(this,AppWidget.class); 
     i2.putExtra("ID", 2); 
     PendingIntent pi2 = PendingIntent.getBroadcast(ctx, 0, i2, 0); 




     rmt.setOnClickPendingIntent(R.id.widgetButton1, pi1); 
     rmt.setOnClickPendingIntent(R.id.widgetButton2, pi2); 
     rmt.setOnClickPendingIntent(R.id.widgetButton3, pi3); 



     return rmt; 

    } 
} 

OnRecive

public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    if(intent.getAction()==null){ 
     int ID_CODE=intent.getIntExtra("ID", 0); 
     Intent i = new Intent(context , MainActivity.class); 
     i.putExtra("ID", ID_CODE); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 



    }else{ 
    super.onReceive(context, intent); 
} 

的OnUpdate

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

    context.startService(new Intent(context,ToggleService.class)); 
} 

MainActivity

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(android.os.Build.VERSION.SDK_INT>=11){ 
     getActionBar().hide(); 

    } 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    Intent i = getIntent(); 
    if(i.getAction()!=null){   

    setContentView(R.layout.launcher); 

    Handler mHandler = new Handler(); 
    mHandler.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      setContentView(R.layout.activity_main); 
     } 
    }, 2000);} 
    else { 
     int ID=i.getIntExtra("ID", 0); 
     if(ID==1){ 
      setContentView(R.layout.activity_main); 
      Toast.makeText(this, String.valueOf(ID), Toast.LENGTH_LONG).show(); 
     } 
     if(ID==2){ 

      setContentView(R.layout.bank_main); 
      Toast.makeText(this, "2", Toast.LENGTH_LONG).show(); 
     } 
     if(ID==3){ 
      setContentView(R.layout.other_main); 
      Toast.makeText(this, "3", Toast.LENGTH_LONG).show(); 
     } 
    } 
    } 

的問題是,每次我點擊每個widgetButton,ID的值始終爲1,它從不更改爲2或3 請幫我

回答

0

當您創建PendingIntent S,要重複使用相同一遍又一遍。你想同時激活3 PendingIntent。爲此,您需要確保呼叫PendingIntent.getBroadcast()的參數確保您將獲得唯一的PendingIntent。最簡單的方法是使用不同的唯一requestCode參數。就像這樣:

Intent i3 = new Intent(this,AppWidget.class); 
    i3.putExtra("ID", 3); 
    PendingIntent pi3 = PendingIntent.getBroadcast(ctx, 3, i3, 0); 
    Intent i1 = new Intent(this, AppWidget.class); 
    i1.putExtra("ID", 1); 
    PendingIntent pi1 = PendingIntent.getBroadcast(ctx, 1, i1, 0); 
    Intent i2 = new Intent(this,AppWidget.class); 
    i2.putExtra("ID", 2); 
    PendingIntent pi2 = PendingIntent.getBroadcast(ctx, 2, i2, 0); 

注:只要有不同的「額外」不會使Intent參數PendingIntent.getBroadcast()獨特。您需要使用不同的Intent ACTION或不同的requestCode參數。

相關問題