如何在android中的应用程序小部件中找到哪个按钮被点击?

2024-05-09

我想设计一个简单的应用程序小部件,它有两个文本视图和两个用于上一个/下一个的按钮。我很难处理应用程序小部件中的按钮单击。实际上我的愿望是,如果用户单击上一个按钮,我想显示以前的值,如果用户单击下一个按钮,我想显示数据库中的下一个值。如何知道点击了哪个按钮? 在这里我像这样注册按钮点击侦听器

  public static class UpdateWidgetService extends IntentService {

    public UpdateWidgetService() {
        super("UpdateWidgetService");

    }

    @Override
    protected void onHandleIntent(Intent intent) {
        AppWidgetManager appWidgetManager = AppWidgetManager
                .getInstance(this);

        int incomingAppWidgetId = intent.getIntExtra(EXTRA_APPWIDGET_ID,
                INVALID_APPWIDGET_ID);
        if (incomingAppWidgetId != INVALID_APPWIDGET_ID) {
            updateOneAppWidget(appWidgetManager, incomingAppWidgetId);

        }

    }


    private void updateOneAppWidget(AppWidgetManager appWidgetManager,
            int appWidgetId) {
        DatabaseManager dbManager = new DatabaseManager(this);

        dbManager.open();
        String contactNumber, date, status, message;
        ArrayList<QueuedMessage> listOfQuedMessage =        (ArrayList<QueuedMessage>) dbManager
                .fetchContactNumber();
        if (listOfQuedMessage.size() == 0)
            Log.i("Db", "null");
        else{
        date = dbManager.fetchDate();
        message = dbManager.fetchMessage();
        status = dbManager.fetchStatus();

        dbManager.closeDatabase();

        RemoteViews views = new RemoteViews(this.getPackageName(),
                R.layout.schdulesms_appwidget_layout);
        views.setTextViewText(R.id.to_appwidget_saved_data,
                listOfQuedMessage.get(count).contacNumber);
        views.setTextViewText(R.id.date_appwidget_saved_data, date);
        views.setTextViewText(R.id.status_appwidget_saved, status);
        views.setTextViewText(R.id.message_appwidgset_saved_data, message);

                    **//here i want do**
                   if(button1){
               btnNxtClick(views, appWidgetId,listOfQuedMessage.size());
                    }else{
                 btPrevClick(views, appWidgetId, listOfQuedMessage.size());
                    }

        appWidgetManager.updateAppWidget(appWidgetId, views);
        }

    }

    private void btnNxtClick(RemoteViews views, int appWidgetId,int sizeOfList) {
        Intent btnNextIntent = new Intent(this, this.getClass());
        btnNextIntent.putExtra(EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent btnNextPendingIntent = PendingIntent.getService(this,
                0, btnNextIntent,    PendingIntent.FLAG_UPDATE_CURRENT);
        views.setOnClickPendingIntent(R.id.btnNext, btnNextPendingIntent);

    }
    private void btPrevClick(RemoteViews views, int appWidgetId,int sizeOfList) {
        Intent btnNextIntent = new Intent(this, this.getClass());
        btnNextIntent.putExtra(EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent btnNextPendingIntent = PendingIntent.getService(this,
                0, btnNextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        views.setOnClickPendingIntent(R.id.btnPrev, btnNextPendingIntent);

    }

}

谁能帮我解决这个问题?谢谢


知道单击了哪个按钮,请按照下列步骤操作:

step 1:为 btnext 和 btn Prev 注册两个接收器

 <intent-filter >
 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
 <action android:name="com.app.example.MyWidget.ACTION_WIDGET_CLICK_NEXT"/>
 <action android:name="com.app.example.MyWidget.ACTION_WIDGET_CLICK_PREV"/>
 </intent-filter>

step 2:对于 btnNext 和 btnPrev 操作字符串:

public class MyWidget extends AppWidgetProvider {
public static String ACTION_WIDGET_CLICK_NEXT = "Action_nextbtn";
public static String ACTION_WIDGET_CLICK_PREV = "Action_prevbtn";
}

step 3:在 onReceive 中

@Override
        public void onReceive(Context paramContext, Intent paramIntent)
        {
          String str = paramIntent.getAction();
            if (paramIntent.getAction().equals(ACTION_WIDGET_CLICK_NEXT)) {
                updateWidgetState(paramContext, str);   
            }
            if (paramIntent.getAction().equals(ACTION_WIDGET_CLICK_PREV)) {
                updateWidgetState(paramContext, str);   
            }
        }

step 4:创建一个更新小部件状态的方法:

static void updateWidgetState(Context paramContext, String paramString)
          {
            RemoteViews localRemoteViews = buildUpdate(paramContext, paramString);
            ComponentName localComponentName = new ComponentName(paramContext, MyWidget.class);
            AppWidgetManager.getInstance(paramContext).updateAppWidget(localComponentName, localRemoteViews);
          }

Step 5:

private static RemoteViews buildUpdate(Context paramContext, String paramString)
          {

            rview = new RemoteViews(paramContext.getPackageName(), R.layout.widget_layout);
            Intent activebtnnext = new Intent(paramContext, MyWidget.class);
            active.setAction(ACTION_WIDGET_CLICK_NEXT);
            PendingIntent configPendingIntentnext = PendingIntent.getBroadcast(paramContext, 0, activebtnnext , 0);
            rmViews.setOnClickPendingIntent(R.id.btnNext, configPendingIntentnext);

            Intent activeprevbtn = new Intent(paramContext, MyWidget.class);
            active.setAction(ACTION_WIDGET_CLICK_PREV);
            PendingIntent configPendingIntentprev = PendingIntent.getBroadcast(paramContext, 0, activeprevbtn , 0);
            rmViews.setOnClickPendingIntent(R.id.btnprev, configPendingIntentprev);
            if(parmString.equals(ACTION_WIDGET_CLICK_NEXT))
            {

             //

            }  
            if(parmString.equals(ACTION_WIDGET_CLICK_PREV))
            {

             //

            }           
             return rview; 
          }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android中的应用程序小部件中找到哪个按钮被点击? 的相关文章

  • 添加监听器与设置监听器

    添加监听器和设置监听器有什么区别 e g addTextChangedListener textWatcher setOnClickListener clickListener Answer 在 aioobe 的回答之后 我在我的项目中对此
  • 当用户快速滚动时,如何延迟列表适配器中视图的加载

    我的列表视图中有从互联网下载的图像 我想在 getView 中添加一些内容 以便在用户快速滑动 滚动时它不会下载图像 我怎样才能开始这样做呢 您可以按照以下步骤延迟 ListView 中视图的加载 首先 你应该让你的ListView对象和Y
  • Android Studio Profiler 中显示“无可调试进程”

    当我尝试在 Android Studio 中使用探查器时 我能够看到已连接的设备 但在探查器中收到 无可调试进程 有人可以帮助我为什么我收到 不可调试的进程 吗 您可以尝试以下任意 全部操作 使缓存失效并重新启动Android Studio
  • 字符串生成器最大长度

    我想知道字符串生成器 或字符串缓冲区 的最大容量是多少 我的 Android 应用程序中有一个静态变量 它应该保存日志字符串 它最多可以容纳 130 行和大约 10000 个字符 我如果我附加更多内容 但它只是不显示 没有错误 没有例外 所
  • 应用程序可能在其主线程上做了太多工作 - Android

    您好 我正在开发一个 Android 应用程序 当我尝试从我的应用程序发送电子邮件时遇到此错误 我在后台发送邮件而不使用基于意图这个链接 http www oodlestechnologies com blogs Send Mail in
  • 如何以编程方式启用编辑文本的垂直滚动条

    我正在尝试实施android scrollbars vertical 通过 Java 代码在 XML 中 我尝试过方法setVerticalScrollBarEnabled true 但它不起作用 有人可以给我一个建议吗 提前致谢 您可以使
  • 如何知道 TTS 何时完成?

    我正在 Android 上实现交互式语音响应应用程序 我想知道如何确定何时tts speak 函数已完成通话 因此我可以调用我的语音识别器函数 public class TTSActivity extends Activity implem
  • 如何从我的android联系人列表中的人名获取电话号码

    我想从我的联系人列表中的人名中获取他的电话号码 我已经使用了下面的代码 但它不能正常工作 告诉我我哪里错了 try cursor company getContentResolver query ContactsContract Data
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • 如果我清理了反向引用,我是否可以观察 ViewModel?

    建议的实施方式ViewModel是通过使用来公开变化的数据LiveData活动 片段和视图的对象 有一些情况 当LiveData不是一个理想的答案或根本没有答案 自然的选择是将观察者模式应用于ViewModel 使其成为可观察的 注册观察员
  • 更改适配器数据时,RecyclerView 滚动到顶部位置

    我正在对某个帖子进行喜欢和不喜欢RecyclerView 我在更改视图后调用api 但问题是RecyclerView当我通知它更新时 总是滚动到顶部 这是我的适配器代码 likeAnim setOnLikeListener object O
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • 在 Android KitKat 中接收彩信

    所以这个视频Android 4 4 短信 API http www youtube com watch v mdq0R2WQssQ DevBytes 解释了 KitKat 中 SMS API 的最新变化 他们还提供了示例项目的链接 http
  • 如何在android上使用xamarin表单执行脚本

    我正在尝试在 Android Mono 上使用 Xamarin Forms 运行 C 脚本 当我运行脚本时 我收到错误 System IO FileNotFoundException 找不到文件 mscorlib dll 这是我试图执行的代
  • IntelliJ 12 中的 Android Hello World - 找不到 android.app.Activity 类

    请看下文 我感觉 SDK 配置不正确 但我不知道如何解决 我尝试用谷歌搜索答案 但没有人遇到这个确切的问题 难道是我的Java版本不对 这两个 SDK 似乎可能相互冲突 我通过以下方式制作了这个项目 创建新项目 Android gt 应用模
  • 加载带有月份标题的 recyclerview 不同类型适配器

    如果从 api 获取不同的月份名称 则尝试将月份名称显示为标题 在这里 我加载月份标题 但是当我加载标题时 它不会加载其他视图 如果数据不同 我需要将月份加载为标题 并且还加载其他视图持有者 我看到一些例子 他们都在 Model 类中使用
  • 将字节数组保存为 Android 设备文件夹中的 jpg 文件

    我正在尝试将图像保存在 Android 设备的文件夹中 我使用的代码如下 var newFolder AndroidEnvironment GetExternalStoragePublicDirectory AndroidEnvironme
  • Android:适合SystemWindows和换行符干扰bottomSheets

    我发现如果父布局包含android fitsSystemWindows true 当发生与视图相关的操作时 它会干扰我的 BottomSheets 定位 具体来说 我遇到的是 文本视图中的换行符将触发底页偏移系统 通知栏的高度 换行符 fi
  • 无法使用 Alarmmanager 定期在后台进行工作

    我想按小时在后台调用一项服务 第一个问题是警报管理器工作不顺利 计时器很糟糕 有时早有时晚 第二个问题是 RemoteServiceException Context startForegroundService 然后没有调用 Servic
  • 什么是 Android DecorView?

    http developer android com reference android view Window html getDecorView http developer android com reference android

随机推荐