2014-01-16 22 views
0

我是全新開發用於android的小部件,所以如果這是一個愚蠢的問題,請耐心等待。我正在寫我自己的MP3播放器,以滿足我的需求。我把它作爲一個應用程序運行得很好,但現在我想將它拉出到主屏幕小部件中(更多的是學習練習,而不是其他任何內容)。每個ImageView上的Android小部件點擊實例化新對象

我將MP3播放器的邏輯分成了一個單獨的類,當我嘗試使用按鈕單擊從該類中的對象時,它可以正常工作。問題是,我似乎無法在下次點擊該按鈕或其他任何按鈕時使用同一個對象。相反,每次在我的小部件中點擊一個按鈕時,它都會重新創建一個新對象。我只是試圖讓我的Play /暫停ImageView功能正常。

這裏是

package com.example.musicplayerforburrito; 

import android.app.PendingIntent; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.RemoteViews; 



public class MyWidgetProvider extends AppWidgetProvider { 

    public static String WIDGET_PLAY_BUTTON = "android.appwidget.action.PLAY_PAUSE_WIDGETS"; 
    MusicPlayerClass mpc = new MusicPlayerClass(); 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 


     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     ComponentName watchWidget = new ComponentName(context, MyWidgetProvider.class); 

     remoteViews.setOnClickPendingIntent(R.id.playpausewidget, getPendingSelfIntent(context, WIDGET_PLAY_BUTTON)); 
     appWidgetManager.updateAppWidget(watchWidget, remoteViews); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     super.onReceive(context, intent); 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     ComponentName watchWidget = new ComponentName(context, MyWidgetProvider.class); 
     if (WIDGET_PLAY_BUTTON.equals(intent.getAction())) { 

      if(!mpc.hasFolders) 
       mpc.Initialize(); 
      if(!mpc.isPlaying) 
      { 
       remoteViews.setTextViewText(R.id.mp3filename, mpc.StartSong()); 
       remoteViews.setImageViewResource(R.id.playpausewidget, R.drawable.pause); 
      } 
      else 
      { 
       mpc.PauseMusic(); 
       remoteViews.setImageViewResource(R.id.playpausewidget, R.drawable.play); 
      } 
      appWidgetManager.updateAppWidget(watchWidget, remoteViews);  
     }  
    } 

    protected PendingIntent getPendingSelfIntent(Context context, String action) { 
     Intent intent = new Intent(context, getClass()); 
     intent.setAction(action); 
     return PendingIntent.getBroadcast(context, 0, intent, 0); 
    } 
} 

任何建議,將不勝感激我WidgetProvider代碼。

TIA

回答

0

如果你想要一個對象,與類相關聯,而不必爲每個需要它聲明爲static實例。這意味着每次創建包含類的實例時,它們都會引用同一個對象。

+0

所以你建議我改變mpc對象(MusicPlayerClass的實例)爲靜態? –

+0

是的,應該允許你的'MyWidgetProvider'的所有實例訪問它的同一個實例。 – CaseyB

+0

甜的,做到了。非常感謝。 –