gpt4 book ai didi

android 小部件无响应

转载 作者:行者123 更新时间:2023-11-29 02:16:55 25 4
gpt4 key购买 nike

我有一个小部件,您按下它,它就会更新小部件上的文本。我已经设置了一个点击监听器来启动另一个 Activity 来执行文本更新,但由于某种原因它只能暂时工作然后它会变得没有响应并且在按下时不做任何事情。有谁知道为什么会这样做?我已经在下面发布了我的小部件代码,以防有帮助。

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
thisWidget = new ComponentName(context, MemWidget.class);
Intent intent = new Intent(context, updatewidget.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

// Get the layout for the App Widget and attach an on-click listener to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.ImageButton01, pendingIntent);

// Tell the AppWidgetManager to perform an update on the current App Widget
appWidgetManager.updateAppWidget(thisWidget, views);

}

@Override
public void onReceive(Context context, Intent intent)
{
appWidgetManager = AppWidgetManager.getInstance(context);
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
thisWidget = new ComponentName(context, MemWidget.class);

// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
}
else
{
super.onReceive(context, intent);
}
}

这是从我的 Activity 中调用的代码

thisWidget = new ComponentName(this, MemWidget.class);
appWidgetManager = AppWidgetManager.getInstance(this);
remoteViews = new RemoteViews(this.getPackageName(), R.layout.widget);

//do work

remoteViews.setTextViewText(R.id.ImageButton01,"setting text here");
appWidgetManager.updateAppWidget(thisWidget, remoteViews);

最佳答案

除了 PendingIntent 之外,onUpdate 方法不会更新 RemoteViews 中的任何数据,因此如果它被调用,小部件将恢复到 R.layout.widget 中定义的状态。

您是否有在用户交互后调用 updateAppWidget 的代码?这也可能有所帮助。

此外,如果更新是内联的并且不需要任何 UI,则您不需要启动 Activity 来执行该更新。如果您的 PendingIntent 用于广播接收器,使用 PendingIntent.getBroadcast,它会更高效并且不会中断返回堆栈。您可以使用与您的应用小部件提供者相同的 BroadcastReceiver。你不需要另一个。


更新:(我不能在下面回复,因为文字太长了)

我会创建一个这样的函数,并在您的 Activity 中通过 onUpdate() 调用它。您需要将 text 保存在某处,以便您也可以将其从 onUpdate() 传递进来。否则它会将文本恢复为 R.layout.widget 中的默认值。

void updateWidget(Context context, CharSequence text) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
remoteViews.setOnClickPendingIntent(R.id.ImageButton01, pendingIntent);

remoteViews.setTextViewText(R.id.ImageButton01, text);

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisWidget = new ComponentName(context, MemWidget.class);
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}

关于android 小部件无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com