2013-07-02 19 views
6

Sto riscontrando qualche problema nell'inviare dati (stringhe) dalla mia attività alla classe appWidgetProvide.Invio di dati al widget (schermata iniziale)

Ho un metodo chiamato updateWidget. Questo viene chiamato dall'attività di configurazione del widget quando il widget viene prima posizionato nella schermata iniziale. Questo metodo viene anche chiamato dal metodo onReceive quando riceve i dati da una delle mie attività quando l'utente inserisce i dati in tale attività.

Ecco il mio problema: il widget viene inserito nella schermata iniziale con tutti i dati nel posto giusto. Ma quando la mia attività invia i dati onReceive (usando intents ed extras) i dati non arrivano. Ho appena ottenuto una stringa vuota su extras.getString.

Ho usato intenzioni per inviare dati tra attività precedenti, devo fare qualcosa di diverso quando invio dati a un widget di classe? O sono semplicemente stupido e mi manca qualcosa di ovvio?

Ho allegato (quelli che penso siano i) bit di codice rilevanti. Fammi sapere se hai bisogno di chiarimenti o altro del codice.

Grazie per aver il tempo di leggere questo e per qualsiasi aiuto che si può dare,

Acclamazioni Rakshak

l'onListItemClick nella classe widget di configurare.

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     Cursor note = mDbHelper.fetchNote(id); 
     startManagingCursor(note); 
     String title = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)); 
     String text = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)); 
     loadData(title); 


     Intent resultValue = new Intent(); 
     resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);    
     setResult(RESULT_OK,resultValue); 
     finish(); 
} 



void loadData(String title) { 

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 

    SingleNote.updateWidget(this, appWidgetManager, mAppWidgetId, title); 

} 

L'intento che invia i dati al OnReceive (questo è in una delle mie classi di attività)

private void updateWidget() { 
    Intent i = new Intent(this, SingleNote.class); 
    i.setAction(SingleNote.UPDATE_ACTION); 
    Toast.makeText(getApplicationContext(),mTitleText.getText()+"from the activity", 
      Toast.LENGTH_SHORT).show();//This works just fine 
    i.putExtra("title", mTitleText.getText()); 
    sendBroadcast(i); 

}

mio widget di fornire classe

public class SingleNote extends AppWidgetProvider { 

public static String UPDATE_ACTION = "ActionUpdateSinglenoteWidget"; 
private static NotesDbAdapter mDbHelper; 



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



    // Tell the AppWidgetManager to perform an update on the current app widget 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget); 
     appWidgetManager.updateAppWidget(appWidgetId, views); 




    } 
} 

@Override 
public void onReceive(Context context, Intent intent) { 

     String action = intent.getAction(); 
     Bundle extras = intent.getExtras(); 
     String title1 = extras.getString("title");//this value does not come through 
     Toast.makeText(context, title1,Toast.LENGTH_LONG).show();//this gives an empty space 

     if (action != null && action.equals(UPDATE_ACTION)) { 
       final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
       ComponentName name = new ComponentName(context, SingleNote.class); 
       int[] appWidgetId = AppWidgetManager.getInstance(context).getAppWidgetIds(name); 
       final int N = appWidgetId.length; 
       if (N < 1) 
       { 
        return ; 
       } 
       else { 
        int id = appWidgetId[N-1]; 
        updateWidget(context, appWidgetManager, id ,title1); 
       } 
     } 

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



static void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, String title){ 

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget); 
    views.setTextViewText(R.id.single_note_title, title); 
    appWidgetManager.updateAppWidget(appWidgetId, views); 



} 

risposta

0

Suggerisco provare a sostituire i.putExtra("title", mTitleText.getText()); in updateWidget() con i.putExtra("title", mTitleText.getText().toString());

String title1 = extras.getString("title"); 

aspetta stringa e restituisce mTitleText.getText()Editable - questo è probabile che una mancata corrispondenza

+0

Grazie uomo, che ha funzionato bene. – DrkStr

Problemi correlati