can't find update callback for CollectionProperty
On the active index.

_Clicking on an item updates the index and calls splash which calls bpy.ops.wm.show_panel(...) to display the newly active item. Hovering over the &quot;Hello World&quot; throws up a panel popover which uses context pointer set in the draw_item method.

I'm looking for a way to display a popup window when user click on one
of the items in the lists.

The list UI changes the property set for active index when another index is chosen.
An update method on the index int property will be fired when list index changes.
Test with question code, draw method tacked onto Properties &gt; Scene panel.
A panel is displayed by operator, and by popover.  In hindsight the UI in popover may be best seen but disabled
import bpy
from bpy.types import Operator, PropertyGroup, UIList
from bpy.props import IntProperty, EnumProperty, CollectionProperty, PointerProperty

class HelloWorldPanel(bpy.types.Panel):
    &quot;&quot;&quot;Creates a Panel in the Object properties window&quot;&quot;&quot;
    bl_label = &quot;Hello World Panel&quot;
    bl_idname = &quot;OBJECT_PT_hello&quot;
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = &quot;object&quot;
    #bl_options = {'INSTANCED'}
        
    def draw(self, context):
        layout = self.layout
        smsl = context.scene.SMSL
        user = getattr(
                context,
                &quot;active_smms_user&quot;, 
                smsl.collection[smsl.active_user_index]
                )
        col = layout.column()

        col.label(text=f&quot; {user.name}&quot;, icon='WORLD_DATA')
        col.prop(user, &quot;val&quot;)
        col.prop(user, &quot;type&quot;)

class SCENE_OT_source_populate(Operator):
    bl_idname = &quot;scene.source_populate&quot;
    bl_label = &quot;Populate source&quot;
    
    def execute(self,context):
        context.scene.SMSL.collection.clear()
        # wtf (lol)&gt;? 
        AssetList = [&quot;Foo, foo&quot;, &quot;Bar, bar&quot;]
        for Asset in AssetList:
            item = context.scene.SMSL.collection.add()
            Path = Asset.split(&quot;,&quot;)
            item.name = Path[1]
            item.description = Asset
        return {'FINISHED'}

class SMSAsset(PropertyGroup):
    type : EnumProperty(
        items=(
            ('A', &quot;Option A&quot;, &quot;&quot;),
            ('B', &quot;Option B&quot;, &quot;&quot;),
        )
    )
    val : IntProperty()
    
def splash(self, context):
    # AFAICT context override does not get to panel
    bpy.ops.wm.call_panel(
            {&quot;active_smms_user&quot; : self.collection[self.active_user_index]},
            'INVOKE_DEFAULT',
            name=&quot;OBJECT_PT_hello&quot;,
            )
    return None
    
class SMSList(PropertyGroup):
    collection : CollectionProperty(
        name = &quot;SMSA&quot;,
        type = SMSAsset)
    active_user_index : IntProperty(update=splash)
        
class SMS_UL_List(UIList):
    def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): 
        layout.context_pointer_set(&quot;active_smms_user&quot;, item,)
        if self.layout_type in {'DEFAULT', 'COMPACT'}:
            layout.prop(item, &quot;name&quot;, text=&quot;&quot;, emboss=False)
            layout.prop(item, &quot;val&quot;, text=&quot;&quot;)
            layout.prop(item, &quot;type&quot;, text=&quot;&quot;)
            if hasattr(bpy.types, &quot;OBJECT_PT_hello&quot;):
                
                layout.popover(&quot;OBJECT_PT_hello&quot;)
        elif self.layout_type in {'GRID'}:
            layout.alignment = 'CENTER'
            layout.label(text=&quot;&quot;, icon_value=icon)
def draw(self, context):
    layout = self.layout
    smsl = context.scene.SMSL
    layout.label(text=&quot;Test&quot;)
    layout.operator(&quot;scene.source_populate&quot;)
    layout.template_list(
            &quot;SMS_UL_List&quot;, &quot;&quot;,
             smsl, &quot;collection&quot;, smsl, &quot;active_user_index&quot;)
             
classes = (
        SMSAsset, 
        SMS_UL_List,
        SMSList,
        HelloWorldPanel,
        SCENE_OT_source_populate,
        )
        
def register():
    for cls in classes:
        bpy.utils.register_class(cls)

    bpy.types.Scene.SMSL = PointerProperty(type= SMSList)
    bpy.types.SCENE_PT_scene.append(draw)

if __name__ == &quot;__main__&quot;:
    register()