当前位置: 首页 > 面试题库 >

Android中的可点击小部件

张茂勋
2023-03-14
问题内容

开发人员文档似乎使我失败了。我可以不假思索地创建一个静态窗口小部件,甚至可以创建一个会自动更新的类似模拟时钟窗口小部件的窗口小部件,但是,我一辈子都无法弄清楚如何创建一个在用户单击时做出反应的窗口小部件。它。这是开发人员文档提供的小部件活动应包含的内容的最佳代码示例(唯一的其他提示是API演示,它仅创建一个静态小部件):

public class ExampleAppWidgetProvider extends AppWidgetProvider {
    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];

            // Create an Intent to launch ExampleActivity
            Intent intent = new Intent(context, ExampleActivity.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.appwidget_provider_layout);
            views.setOnClickPendingIntent(R.id.button, pendingIntent);

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

来自:Android开发人员文档的小部件页面

因此,看起来像单击小部件时调用了挂起的意图,这是基于一种意图的(我不太确定意图和挂起的意图之间的区别是什么),并且该意图是用于ExampleActivity类的。因此,我将示例活动类设为一个简单的活动,在创建该活动时,将创建一个mediaplayer对象,然后启动它(它永远不会释放该对象,因此最终会崩溃,这是代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
    mp.start();
}

但是,当我将小部件添加到主屏幕并单击它时,没有任何播放,实际上,当我将更新计时器设置为仅几百毫秒(在appwidget提供程序xml文件中)时,没有任何播放。此外,我设置了断点,不仅发现它永远不会到达活动,而且我设置的断点也不会触发。(我仍然没有弄清楚为什么会这样),但是,logcat似乎表明活动类文件正在运行。

因此,有什么我可以做的事情来使Appwidget响应点击?由于onClickPendingIntent()方法与onClick类型的方法最接近。


问题答案:

首先,添加带有常量的静态变量。

public static String YOUR_AWESOME_ACTION = "YourAwesomeAction";

然后,你需要先将动作添加到意图中,然后再将意图添加到未决意图中:

Intent intent = new Intent(context, widget.class);
intent.setAction(YOUR_AWESOME_ACTION);

(其中widget.class是你的AppWidgetProvider的类,当前的类)

然后,你需要使用getBroadcast创建一个PendingIntent

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

在窗口小部件中为可点击的视图设置onClickPendingIntent

remoteView.setOnClickPendingIntent(R.id.widgetFrameLayout, pendingIntent);

接下来,在同一类中重写onReceive方法:

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

然后通过在onReceive方法中查询为你的操作返回的意图来响应你的按钮按下:

if (intent.getAction().equals(YOUR_AWESOME_ACTION)) {
   //do some really cool stuff here
}

那应该做到的!



 类似资料:
  • 问题内容: 如本教程所述,我在GridView中显示了图像。我希望能够单击单个图像并执行其他事件,所以我需要知道单击了哪个图像。 我必须在ImageAdapter类中添加imageView.onKeyDown(keyCode,event)吗?这是当前存在的代码: 如何显示点击的图片?如何创建适当的处理程序? 问题答案: 对于GridView,可以使用setOnItemClickListener方法

  • 本文向大家介绍Android实现可点击展开的TextView,包括了Android实现可点击展开的TextView的使用技巧和注意事项,需要的朋友参考一下 概述 Android开发过程中,经常遇到 Textview 展示不完全的情况。 遇到此情况,通常的处理是: 方案一 Textview 添加 android:ellipsize 属性,让展示不完的部分使用省略号代替。 方案二 Textview 采

  • 问题内容: 我正在使用JOptionPane来显示一些产品信息,并且需要向网页添加一些链接。 我发现您可以使用包含html的JLabel,因此我提供了一个链接。该链接在对话框中显示为蓝色并带有下划线,但是不可单击。 例如,这也应该起作用: 如何在JOptionPane中获得可点击的链接? 谢谢,保罗。 编辑 -例如解决方案 问题答案: 您可以将任何组件添加到JOptionPane。 因此,添加一个

  • 我正在设计一个Gridview,其中每个项目都有一个TextView和ImageView。我试图找到关于如何使ImageView可点击以及GridView项目本身(两者都会触发不同的方法())的教程(逐步更新和清晰的教程)。 这就是我目前掌握的: Activity.java GV适配器.java 结果: 当Item1(Textview)被点击时,它应该点击整个Item并触发GridView的OnI

  • 本文向大家介绍Android实现可点击的幸运大转盘,包括了Android实现可点击的幸运大转盘的使用技巧和注意事项,需要的朋友参考一下 之前的项目有一个幸运大转盘的功能,在网上找了很久,都没有合适的方法。 这是效果图,实现目标:十二星座的图片可点击切换选中效果,根据选择不同的星座,实现不同的 方法。之前网上的都是带有指针的,或者可点击改变效果,但是并不知道选择的到底是哪个,即虚拟选择。 实现该功能