2013-07-02 15 views
6

Mam problemy z wysyłaniem danych (ciągi) z mojej aktywności do mojej klasy appWidgetProvide.Wysyłanie danych do mojego widżetu (ekranu głównego)

Mam metodę o nazwie updateWidget. Zostanie wywołana przez działanie konfiguracyjne widgetu, gdy widget zostanie najpierw umieszczony na ekranie głównym. Ta metoda jest również wywoływana przez metodę onReceive, gdy otrzymuje dane z jednej z moich aktywności, gdy użytkownik wprowadza dane do tego działania.

Oto mój problem: widget zostanie umieszczony na ekranie głównym z wszystkimi danymi we właściwym miejscu. Ale kiedy moja aktywność wysyła dane onReceive (używając intencji i dodatków) dane nie przychodzą. Po prostu dostaję pusty ciąg na extras.getString.

Służyłem do przesyłania danych między działaniami wcześniej, czy muszę coś innego robić, gdy wysyłam dane do widżetu z klasą? Czy jestem po prostu głupi i brakuje mi czegoś oczywistego?

Mam dołączone (jak sądzę są) odpowiednie fragmenty kodu. Daj mi znać, jeśli potrzebujesz wyjaśnienia lub więcej kodu.

Dzięki za poświęcenie czasu na przeczytanie tego i za wszelką pomoc, że można dawać,

Cheers Rakshak

onListItemClick w klasie widget skonfigurować.

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

} 

Intencją, która wysyła dane do onReceive (to jest w jednym z moich klas działalności)

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

}

Moje widget zapewniają klasę

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



} 

Odpowiedz

0

Sugeruję aby spróbować zastąpić i.putExtra("title", mTitleText.getText()); w za pomocą i.putExtra("title", mTitleText.getText().toString());

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

oczekuje ciąg i mTitleText.getText() Przywraca Editable - to prawdopodobnie niedopasowanie

+0

Dzięki człowiek, który pracował dobrze. – DrkStr

Powiązane problemy