我对Android应用小部件有点困惑。我明白我可以创建一个按钮来启动一个活动,但是我不知道如何创建一个按钮来编辑小部件中的TextView文本。 有人能告诉我我错过了什么吗?Android应用小部件 - 更改TextView内容的按钮
非常感谢。
编辑: 我并不是说用户输入新文本,我的意思是应用程序自动更改文本,没有任何UI(即对话框或活动)。
我对Android应用小部件有点困惑。我明白我可以创建一个按钮来启动一个活动,但是我不知道如何创建一个按钮来编辑小部件中的TextView文本。 有人能告诉我我错过了什么吗?Android应用小部件 - 更改TextView内容的按钮
非常感谢。
编辑: 我并不是说用户输入新文本,我的意思是应用程序自动更改文本,没有任何UI(即对话框或活动)。
编辑: OK,所以你设置一个getBroadcast的PendingIntent在您的按钮与setOnClickPendingIntent,并执行更新(或致电您的更新方法)与接收器的新文本。您的AppWidgetProvider课程可以是您的接收器(您可以在onReceive中找到您的意图),否则您将创建一个新课程,延伸到BroadcastReceiver。
EDIT2(示例代码):
我没有跑/编译这段代码,所以希望它不会有错误。 这是一个简单的辅助方法来获取自定义操作基本更新未决意图:
public PendingIntent getRefreshPendingIntent(Context context, int appWidgetId){
Intent intent = new Intent("my.package.ACTION_UPDATE_WIDGET");
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
渔获的onReceive自定义操作在重写的AppWidgetProvider类
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
//handle other appwidget actions
if (intent.getAction().equals("my.package.ACTION_UPDATE_WIDGET")) {
//some code here that will update your widget
}
//handle other appwidget actions
}
您还需要添加自定义操作,以您的清单中appwidget接收机声明
<receiver
android:name="my.package.MyWidgetProviderClass"
android:label="MyWidget">
<intent-filter>
<action android:name="my.package.ACTION_UPDATE_WIDGET"/>
<!-- other intent filters -->
</intent-filter>
<!-- meta data pointing to widget xml file -->
</receiver>
最后你应用挂起意图的IntentFilter的您RemoteViews在任何你正在建设它,单击该按钮时,将发送my.package.ACTION_UPDATE_WIDGET行动时,这将是你的AppWidgetProvider,被抓在那里你可以(或调用一个方法来)执行您AppWidget更新
当你点击它myRemoteViews.setOnClickPendingIntent(R.id.id_of_update_button, getRefreshPendingIntent(context, appWidgetId);
此代码更新微件,你可以对其进行编辑和修改监听到你的按钮:
public class MyWidgetProvider extends AppWidgetProvider {
private static final String ACTION_CLICK = "ACTION_CLICK";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// Get all ids
ComponentName thisWidget = new ComponentName(context,
MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
// Create some random data
int number = (new Random().nextInt(100));
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
Log.w("WidgetExample", String.valueOf(number));
// Set the text
remoteViews.setTextViewText(R.id.update, String.valueOf(number));
// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
}
完整的教程是here。
我不是指用户更新文本,而是指应用程序在没有任何UI(即对话框或活动)的情况下自动更改文本。我会编辑我的问题,以便更清楚。 – SZH 2012-08-12 01:23:14
好的,更新了我的答案 – roflharrison 2012-08-12 03:14:51
谢谢!你能否提供一些示例代码? – SZH 2012-08-12 16:29:12