【问题标题】:Listview onItemSelected doesn't fire off when navigating back to the previous selected item导航回上一个选定项目时,Listview onItemSelected 不会触发
【发布时间】:2025-12-18 15:05:01
【问题描述】:

我的活动包括 2 个片段。左边的Fragment 1包含一个ListView,我们称之为listView1,右边的Fragment 2包含一个GridView。我实现了一个 onItemSelectedListener 以在每次选择 listView1 中的项目时将数据发送到远程服务器(用户使用 D-pad 导航)。监听器如下:

listView1.setOnItemSelectedListener(new OnItemSelectedListener(){
    public void onItemSelected(AdapterView<?> parent, View view, 
                                          int position, long id){
        //send data to sever here
        sendData();
    }
});

当我在 ListView 中导航时没问题。 onItemSelected() 内部的 sendData() 方法被正常调用。但问题是每次我导航到我的 GridView,然后导航回 listView1 中的上一个选定项目时,onItemSelected 和 sendData() 方法都不再触发。我搜索了一下,在android reference发现只有当新选择的位置与之前选择的位置不同时才会调用onItemSelected方法。

那么,即使我导航回上一个选定的项目,我如何才能让 onItemSelected 触发?

提前致谢!

【问题讨论】:

    标签: android android-listview google-tv android-event


    【解决方案1】:

    使用 onListItemClick 代替:

    @Override
    public void onListItemClick(ListView parent, View view, int position, long id) {
        sendData();
    }
    

    【讨论】:

    • 感谢 Marcin S。但它要求用户执行“按 Enter”操作,这可能会降低他们的体验,因为他们使用 D-Pad 导航。