如何在ListView的setOnItemClickListener中取消激活/突出显示Android ListView项?

Aam*_*mir 4 android android-widget android-layout android-listview

在我的一个活动中,我有多个ListView控件.说清单1,清单2清单3.在列表1项目的单击上,我从Web服务加载列表2列表3的数据.点击项目的背景将突出显示.我是通过跟随选择器实现的.

<item android:drawable="@drawable/item_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/item_focused" android:state_focused="false" 
    android:state_pressed="false" 
    android:state_selected="true"/>
<item android:state_activated="true" android:drawable="@drawable/item_selected"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,我已指定android:state_activated ="true"来更改单击/点击项目的BG.这很好用.

实际上我想阻止点击项目被选中/突出显示如果正在加载某些其他项目的数据...就像

list1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                // load data if no other call to web service is in progress
                if (_isNotLoadingData) {
                     loadList2AndList3DataUsingWebService();
                } else {
                    //Stop This Item From selected/highlighted
                    //BUT none of the following work. .. Item is always Selected
                    view.setSelected(false);
                    //view.setActivated(false);
                    //view.setEnabled(false);
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

上面的代码停止多个调用被定向到我们的Web服务,但如果没有为该ListView项调用Web服务,我无法阻止该项突出显示/激活.

我该如何解决这个问题?

2012年3月19日晚8点08分编辑:还没有正确答复...我被困住等待任何帮助

Rei*_*ier 11

我几天前遇到过同样的问题.解决方案不是设置view.setItemChecked(false),而是在.onItemClick()-method中调用listview并设置listview.setItemChecked(position, false).这解决了我.

例:

listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view,
            int position, long arg3) {

        // load data if no other call to web service is in progress
        if (_isNotLoadingData) {
             loadList2AndList3DataUsingWebService();

        } else {
            ListView lv = (ListView) adapterView;
            lv.setItemChecked(position, false);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)