Android 在StackView小部件项内设置onClick事件

Android 在StackView小部件项内设置onClick事件,android,android-widget,widget,onclick,stackview,Android,Android Widget,Widget,Onclick,Stackview,我有一个集合小部件(这很重要!)。看起来是这样的: 我的代码基于官方Android文档: 所以对于小部件,我在StackView集合中使用带有自定义对象的集合。此集合由StackRemoteViewsFactory(实现RemoteViewsService.RemoteViewsFactory)处理。 正如您所看到的,每个项目都有三个图像按钮和一个文本视图 我知道如何为整个RemoteView项目添加onClick行为。 官方文件对此进行了描述 但是我的每个视图(按钮和文本视图)都需要四个on

我有一个集合小部件(这很重要!)。看起来是这样的:

我的代码基于官方Android文档:

所以对于小部件,我在StackView集合中使用带有自定义对象的集合。此集合由StackRemoteViewsFactory(实现RemoteViewsService.RemoteViewsFactory)处理。 正如您所看到的,每个项目都有三个图像按钮和一个文本视图

我知道如何为整个RemoteView项目添加onClick行为。 官方文件对此进行了描述

但是我的每个视图(按钮和文本视图)都需要四个onClick行为

我的问题: 这是否可能在具有RemoteView集合的小部件中为每个StackView项单击不同的视图

现在我看不出有任何可能如何做到这一点:(


更新:


我想在onClicks上有一些类似于这个问题的东西:。但是这个问题的解决方案不适用于具有远程视图集合的小部件,因为小部件实现不同。

如果您看过StackView小部件示例代码,您知道有提供者类和服务类。在服务类中,请尝试添加SetOnClickFillinContent到stackview布局的每个id,意图包括“命令字”。在提供程序类中,将SetPendingEntTemplate设置为示例代码。这是重要的一部分,在提供程序类中,有OnReceive()。SetPendingEntTemplate将发送意图,包括在提供程序类中设置的特定操作和“comman word”设置为服务类中layour的每个id。现在您知道用户从堆栈视图小部件中单击了哪个按钮。
如果您需要进一步的提示,请告诉我,我将添加示例代码。

因此,基本上,您需要做两件事,将onClick行为添加到Android应用程序小部件中StackView/ListView的按钮中

  • 在实现RemoteViewService.RemoteServiceFactory的StackRemoteViewsFactory的getViewAt函数中, 为要添加函数的id添加SetOnClickFillingContent()。例如

     RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget__fan);
     Bundle extras = new Bundle();
     extras.putInt(TestWidget.EXTRA_ITEM, position);
     Intent fillInIntent = new Intent();
     fillInIntent.putExtras(extras);
     rv.setOnClickFillInIntent(R.id.fan_status, fillInIntent); // id of button you want to add a onClick function to.
    
    public void onReceive(Context context, Intent intent) {    
        if (intent.getAction().equals(act1)) {
           // Add your functionalities
        }
    }
    
  • 在扩展AppWidgetProvider的WidgetProvider类的onUpdate函数中, 添加一个setPendingEventTemplate()

  • 现在,已经为该特定按钮设置了操作(在我的例子中为R.id.fan_status)

     RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget__fan);
     Bundle extras = new Bundle();
     extras.putInt(TestWidget.EXTRA_ITEM, position);
     Intent fillInIntent = new Intent();
     fillInIntent.putExtras(extras);
     rv.setOnClickFillInIntent(R.id.fan_status, fillInIntent); // id of button you want to add a onClick function to.
    
    public void onReceive(Context context, Intent intent) {    
        if (intent.getAction().equals(act1)) {
           // Add your functionalities
        }
    }
    

    对不起,你的英语很难理解。请提供一个示例代码。也许它会更简单。谢谢。@user1482049你能看看我的问题,告诉我我在代码中到底犯了什么错误吗?你得到你的答案了吗?因为我面临着同样的问题。你能看看我的问题吗?你解决过这个问题吗?我会很有帮助的如果您可以发布您的解决方案,请。