android - 旋转屏幕时小部件上的按钮单击丢失

标签 android android-widget widget

我有一个非常简单的小部件应用程序,它由一个带有背景的 LinearLayout 和一个 ImageButton 组成。

AppWidgetProvider onUpdate() 方法中,我注册了按钮的点击以广播一个 Intent 。当小部件首次加载时,一切运行良好并且点击被捕获。旋转屏幕时会出现问题,即使屏幕旋转回来,也不会再次捕获点击。

当屏幕旋转时,如何重新注册点击?

下面是我正在使用的一些代码段。

AppWidgetProvider

@Override
public void onReceive(Context context, Intent intent)    
{
    super.onReceive(context, intent);

    if(intent.getAction().equals("test.CLICK"))
    {
        CallTestMethod(context);
    }
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    // Perform this loop procedure for each App Widget that belongs to this provider
    for (int i=0; i<N; i++) {
        int appWidgetId = appWidgetIds[i];

        RemoteViews views=new RemoteViews(context.getPackageName(), R.layout.widget);            
        Intent clickintent=new Intent("test.CLICK");
        PendingIntent pendingIntentClick=PendingIntent.getBroadcast(context, 0, clickintent, PendingIntent.FLAG_UPDATE_CURRENT);
        views.setOnClickPendingIntent(R.id.change_mode, pendingIntentClick);
        SetInitialLayout(context);
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

list

<receiver android:name=".Widget" android:label="@string/widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.ACTION_APPWIDGET_CONFIGURE" />
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action android:name="test.CLICK" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_mode_switcher" />            
    </receiver>

布局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget_layout"
    android:layout_width="140dip"
    android:layout_height="140dip"
    android:scaleType="fitCenter"
    android:orientation="vertical"
    android:background="@drawable/background">
    <ImageButton
        android:id="@+id/change_mode"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitCenter"
        android:orientation="vertical"
        android:src="@drawable/none_selected"
        android:background="@null"
        android:clickable="true" />
</LinearLayout>

谢谢大家的帮助!

最佳答案

这对我有帮助:Android widget ImageButton loses image when screen is rotated

简而言之,您必须在每次调用 awm.updateAppWidget 之前注册点击(views.setOnClickPendingIntent)

关于android - 旋转屏幕时小部件上的按钮单击丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4247865/

相关文章:

jsf - 使用组件 ID 作为 widgetVar 名称

ios - 如何使用 NSUserDefaults 与 Today 扩展共享数据(自定义对象数组)?

java - 保存 SWT Widget 对象的集合

android - 如何在 Android 中创建圆形电话屏幕?

java - Android 数据库应用程序在模拟器上运行良好,但在设备上出现错误

java - Runnable 不再在 Service 中运行以定期从 URL 检索

java - C# 服务器套接字通过 NAT 到 Android 套接字

android - 如何在 android 中创建类似下拉菜单(不是 Spinner)的东西?

android - 选项卡内容处理....如何在 android 中?

java - 显示具有 AppCompat 主题的壁纸 (Android)