Android - 小部件点击监听器不起作用

标签 android widget onclicklistener android-pendingintent appwidgetprovider

我有 2 种可能的小部件布局,用户可以通过偏好 Activity 更改它们,我的意思是亮色和暗色。两者看起来很相似,onlu 颜色不同。事件 ID 是相同的。我想提供点击整个小部件的可能性,这将打开 Activity 并通过 Intent 发送必要的数据。我在 AppWidgetProvider 中的代码根本不起作用。

这里是:

private final String ACTION = "CLICK_MY_BUTTON";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    SharedPreferences theme = Data.getPreferences(context, Data.Prefs.THEME);
    boolean dark = theme.getString(Data.widgetsThemeSetings, "1").equals("1");
    int layoutId = dark?R.layout.widget_dark:R.layout.widget_light;
    for (int i:appWidgetIds) {
        Intent intent = new Intent(context, MainActivity.class);
        intent.putExtra("from", "widget");
        intent.setAction(ACTION);
        int id = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
        intent.putExtra("id", id<60?id:id-1);
        intent.putExtra("widgetID", i);
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), layoutId);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, intent, 0);
        remoteViews.setOnClickPendingIntent(R.id.widget_relative_main, pendingIntent);
        String output = "";
        for (String s:HolidayCalendar.getInstance(context).getTodayTexts()) {
            output += "\n\n" + Data.pointer + " " + s;
        }
        remoteViews.setTextViewText(R.id.widget_text_holiday, output.substring(2));
        appWidgetManager.updateAppWidget(i, remoteViews);
    }
}

还有我的一个小部件布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget_relative_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/rounded_widget_dark"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/widget_text_today"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:text="@string/today_is"
        android:textColor="#FFF"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/widget_text_holiday"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/widget_text_today"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:textColor="#FFF" />

</RelativeLayout>

如何让它发挥作用?我不知道什么可能是不正确的...

最佳答案

这是我的工作代码。这会起作用。

 for (int i = 0; i < N; i++) {
            int awID = ids[i];

    RemoteViews    views = new RemoteViews(getPackageName(),
                        R.layout.widget_layout);

                Intent intent = new Intent(this, your intented class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                //views.setTextViewText(R.id.widgetcount, visitstext);
                PendingIntent pendingIntent = PendingIntent.getActivity(this,
                        0, intent, 0);

                views.setOnClickPendingIntent(R.id.widgetimage, pendingIntent);
manager.updateAppWidget(awID, views);
    }

关于Android - 小部件点击监听器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35391040/

相关文章:

android - 更新到 ADT 20 后导出 Android 项目时出现 Proguard 错误

android - 检测 Android 应用程序中推送通知的到达

android - 为什么我的 SharedPreferences 在单击按钮时不保存?

Javascript 小部件实现

android - 更改 onReceive 方法上的图标 - Android 小部件

android - 手机重启后小部件的按钮不起作用

android - 动态设置OnClickListener

android - 前台 Activity 是否总是具有最低的 OOM 分数?

javascript - 动态加载 HTML 的 Onclick 监听器

android - 为每个 ListView 行而不是 onItemClickListener 实现 onClickListener 是否有缺点?