您好,我有一个 Activity 1,它需要将数据发送到具有 TextView 的 Appwidget(小部件)。
为了在 Activity 之间发送数据,我知道我们可以使用 intent.putExtra("mydata", dataString);
并收到与 String data = bundle.getString("mydata");
相同的内容但就我而言,我需要将数据(字符串)发送到应用程序小部件。
当我使用
Bundle dataFromPrevious = getIntent().getExtras();
String newString = dataFromPrevious.getString("mydata");
在 AppWidgetProvider 中,它在 getIntent 中抛出一个错误,指出 getIntent 未定义类型类。
我怎样才能得到这个 AppWidget 中的字符串?此外,此文本将从 Activity 1 开始更新,经常使用新字符串,因此使用 SharedPrefrences
。这种情况的好选择?还有其他办法吗?
更新 1:
正如约瑟夫所说,我已经添加了
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
在我的 list 中,
现在我还在 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);
}
在我的更新中我有
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);
}
}
这是我发送数据的另一个 Activity :
final String text = ((TextView)findViewById(R.id.textview)).getText().toString();
Intent intent = new Intent(FirstActivity.this, MainWidget.class);
intent.putExtra("mydata", text);
最佳答案
您需要使用 BroadcastReceiver
。简而言之:将 BroadcastReceiver
添加到您的 AppWidgetProvider
,它作用于自定义 Intent
,然后刷新您的小部件。
从你的 Activity
然后你需要做的就是发送一个带有自定义 Intent 的广播(Context.sendBroadcast
)(你可以将数据添加到 Intent
与 putExtra
照常)。
关于java - 从另一个 Activity 获取数据到 App Widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540970/