Привет. У меня есть мероприятие 1, которому нужно отправить данные в Appwidget (виджет), в котором есть текстовое представление.
Для отправки данных между активами я знаю, что мы можем использовать intent.putExtra("mydata", dataString);
и получать то же самое с String data = bundle.getString("mydata");
Но в моем случае мне нужно отправить данные (String) в приложение Widget.
Когда я использую
Bundle dataFromPrevious = getIntent().getExtras();
String newString = dataFromPrevious.getString("mydata");
внутри AppWidgetProvider он выдает ошибку в getIntent, говоря, что getIntent не определен для типа Class.
Как я могу получить строку внутри этого AppWidget? Кроме того, этот текст будет обновляться в упражнении 1 новой строкой, поэтому использование SharedPrefrences
является хорошим выбором для этой ситуации? Есть ли другой способ?
ОБНОВЛЕНИЕ 1:
Как упомянул Иосиф, я добавил
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
в моем манифесте
Теперь я также создал переопределение OnRecieve в AppWidget
@Override
public void onReceive(Context context, Intent intent) {
Bundle getPrevData = intent.getExtras();
String data = getPrevData.getString("mydata");
newdata = data;
super.onReceive(context, intent);
}
В моем обновлении у меня есть
views.setTextViewText(R.id.dataWidget,newdata);
Здесь newdata
- это public static String
Но это ничего не отображает !!! когда я устанавливаю TextViewText для просмотра текста в виджете. Я что-то здесь упускаю? Пожалуйста, помогите ...
ОБНОВЛЕНИЕ 2:
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RemoteViews;
import android.widget.Toast;
public class MainWidget extends AppWidgetProvider {
private RemoteViews views;
public static String newdata
@Override
public void onReceive(Context context, Intent intent) {
Bundle getPrevData = intent.getExtras();
String data = getPrevData.getString("mydata");
newdata = data;
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
views = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
appWidgetManager.updateAppWidget(appWidgetIds, views);
//views.setTextViewText(R.id.dataWidget,newdata);
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
А это моя другая активность, которая отправляет данные:
final String text = ((TextView)findViewById(R.id.textview)).getText().toString();
Intent intent = new Intent(FirstActivity.this, MainWidget.class);
intent.putExtra("mydata", text);