您好,我有一个活动1,需要将数据发送到具有文本视图的Appwidget(小部件)。
为了在活动之间发送数据,我知道我们可以使用intent.putExtra("mydata", dataString);
并使用String data = bundle.getString("mydata");
重新获取相同内容但在我的情况下,我需要将数据(字符串)发送到应用小部件。
当我使用
时Bundle dataFromPrevious = getIntent().getExtras();
String newString = dataFromPrevious.getString("mydata");
在AppWidgetProvider中,它在getIntent中抛出一个错误,说类型Class的getIntent是未定义的。
如何获取此AppWidget中的字符串?此文本也将从活动1更新为新字符串,因此使用SharedPrefrences
是一个很好的选择吗?还有其他办法吗?
更新1:
正如约瑟夫所说,我补充道
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
在我的清单中,
现在我还在AppWidget中创建了一个OnRecieve Override
@Override
public void onReceive(Context context, Intent intent) {
Bundle getPrevData = intent.getExtras();
String data = getPrevData.getString("mydata");
newdata = data;
super.onReceive(context, intent);
}
在我的On Update中我有
views.setTextViewText(R.id.dataWidget,newdata);
此处newdata
是public static String
但它不会显示任何内容!当我将TextViewText设置为小部件中的textview时。我错过了什么吗?请帮忙......
更新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);
答案 0 :(得分:1)
您需要使用BroadcastReceiver
s。简而言之:向您的BroadcastReceiver
添加AppWidgetProvider
,该Intent
会对自定义Activity
执行操作,然后刷新您的小部件。
从Context.sendBroadcast
开始,您需要做的就是发送包含自定义意图的广播(Intent
)(您可以使用putExtra
向{{1}}添加数据按照惯例)。
答案 1 :(得分:0)
您可以在不使用广播接收器的情况下更新小部件中的数据。
将数据保存在sharedPreference中。
使用新数据创建远程视图,并使用AppWidgetManager.updateWidget更新小部件。
以下是示例代码。
RemoteViews updateViews = buildUpdate(context); // Update the view using the new data.
ComponentName thisWidget = new ComponentName(context, WidgetClassName.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, updateViews);
这就是我在之前的申请中所做的。
Saneesh CS