Senden von Daten an mein Widget (Homescreen)

Ich habe Probleme beim Senden von Daten (Zeichenfolgen) aus meiner Aktivität an meine appWidgetProvide-Klasse.

Ich habe eine Methode namens updateWidget. Dies wird von der Widget-Konfigurationsaktivität aufgerufen, wenn das Widget zum ersten Mal auf dem Startbildschirm platziert wird. Diese Methode wird auch von der onReceive-Methode aufgerufen, wenn Daten von einer meiner Aktivitäten empfangen werden, wenn der Benutzer Daten in diese Aktivität eingibt.

Hier ist mein Problem: Das Widget wird auf dem Startbildschirm mit allen Daten an der richtigen Stelle platziert. Aber wenn meine Aktivität Daten an onReceive sendet (mit Absichten und Extras), kommen die Daten nicht durch. Ich erhalte nur eine leere Zeichenfolge in der Datei extras.getString.

Ich habe bereits zuvor die Absichten zum Senden von Daten zwischen Aktivitäten verwendet. Muss ich etwas anderes tun, wenn ich Daten an eine Widget-Bereitstellungsklasse sende? Oder bin ich nur dumm und vermisse etwas Offensichtliches?

Ich habe relevante Code-Teile angehängt (was ich denke). Lassen Sie mich wissen, wenn Sie weitere Erläuterungen zum Code benötigen.

Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen, und für jede Hilfe, die Sie geben können,

Prost Rakshak

Die Klasse onListItemClick in der Widget-Konfiguration.

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

}

Die Absicht, die Daten an onReceive sendet (dies ist eine meiner Aktivitätsklassen)

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

}

Mein Widget bietet Klasse

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



}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage