android - 使用 RemoteViews 在单击时设置 ImageView 源

标签 android onclick android-imageview remoteview android-remoteview

有没有一种方法可以在点击远程 View 时设置 ImageView 的来源。我知道你能做到 remoteViews.setImageViewResource(R.id.image, R.drawable.source);

但这不允许我在点击时执行此操作。

如有任何帮助,我们将不胜感激。 谢谢。

最佳答案

but that does not allow me to do it on click

是的,确实如此。在 RemoteViews 中的 ImageView 条目上调用 setOnClickPendingIntent(),使用指向您的 AppWidgetProvider 的 PendingIntent 或另一个 BroadcastReceiver。在那里,调用 setImageResource() 来更新您的 ImageView 并通过 AppWidgetManager 将更新推送到主屏幕。

例如,此示例 AppWidgetProvider 会在用户点击任一骰子时使用新的随机骰子滚动更新一对 ImageView 小部件:

/***
  Copyright (c) 2008-2012 CommonsWare, LLC
  Licensed under the Apache License, Version 2.0 (the "License"); you may not
  use this file except in compliance with the License. You may obtain a copy
  of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
  by applicable law or agreed to in writing, software distributed under the
  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
  OF ANY KIND, either express or implied. See the License for the specific
  language governing permissions and limitations under the License.

  From _The Busy Coder's Guide to Android Development_
    http://commonsware.com/Android
*/

package com.commonsware.android.appwidget.dice;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

public class AppWidget extends AppWidgetProvider {
  private static final int[] IMAGES={R.drawable.die_1,R.drawable.die_2,
                                      R.drawable.die_3,R.drawable.die_4,
                                      R.drawable.die_5,R.drawable.die_6};

  @Override
  public void onUpdate(Context ctxt, AppWidgetManager mgr,
                        int[] appWidgetIds) {
    ComponentName me=new ComponentName(ctxt, AppWidget.class);

    mgr.updateAppWidget(me, buildUpdate(ctxt, appWidgetIds));
  }

  private RemoteViews buildUpdate(Context ctxt, int[] appWidgetIds) {
    RemoteViews updateViews=new RemoteViews(ctxt.getPackageName(),
                                            R.layout.widget);

    Intent i=new Intent(ctxt, AppWidget.class);

    i.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

    PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0 , i,
                                                PendingIntent.FLAG_UPDATE_CURRENT);

    updateViews.setImageViewResource(R.id.left_die,
                                     IMAGES[(int)(Math.random()*6)]); 
    updateViews.setOnClickPendingIntent(R.id.left_die, pi);
    updateViews.setImageViewResource(R.id.right_die,
                                     IMAGES[(int)(Math.random()*6)]); 
    updateViews.setOnClickPendingIntent(R.id.right_die, pi);
    updateViews.setOnClickPendingIntent(R.id.background, pi);

    return(updateViews);
  }
}

(来自 this sample project)

关于android - 使用 RemoteViews 在单击时设置 ImageView 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065581/

相关文章:

android - 在 android 中显示 gif

android - 在 ImageView 中设置圆角图像

android - 为 facebook 开发生成哈希键

javascript - 使用 onclick 按钮在 Javascript 中添加输入字段

android - 如何制作 GCM servlet?

javascript - 应用js功能后无法点击

javascript - GWT - 未触发 onClick

android - Android 上的 Alpha 渐变

android.content.ActivityNotFoundException : No Activity found to handle Intent splash screen

android - 如何将文件系统移植到Android?