如果由onItemLongClickListener调用,则ListActivity view.setSelected(true)未注册

时间:2011-11-16 19:18:28

标签: android listview android-listview listactivity

在Android 2.2上发生以下情况:

我有一个ListActivity,可以选择单个项目。我注册1)一个onClickItemListener和 2)onItemLongClick监听器

用于ListActivity的ListView。在itemClick上我只是将列表项设置为选中。在itemLongClick上,我想做同样的事情和其他步骤。我的问题是,从onItemLongClickListener调用view.setSelected(true)不起作用 - ListView中的项目未被选中。即使从这两个不同的侦听器调用完全相同的方法,也会发生这种情况!请参阅以下代码:

    /*
     * Set the onClickListeners for the ListView items.
     */
    this.listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            itemClick(view, position);
        }
    });
    this.listView.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            itemClick(view, position);
            return true;
        }
    });

    /*
     * Basic procedure when the user clicks
     * an item in the list.
     */
    private void itemClick(View view, int position) {
        view.setSelected(true);
        selectedPosition = position;
        selectedView = view;
    }

这里的onItemLongClickListeners返回true以防止点击冒泡到onClickListener。任何帮助将不胜感激!

编辑:

结果

view.setSelected(true);

从来没有像我想象的那样锻炼。 ListActivity的标准功能是在上面的代码中一直为我选择项目,并且调用view.setSelected()从未实际选择ListView中的项目。更换方法如下解决了我的问题:

    /*
     * Basic procedure when the user clicks
     * an item in the list.
     */
    private void itemClick(View view, int position) {
        getListView().setItemChecked(position, true);
        selectedPosition = position;
        selectedView = view;
    }

感谢Jimbo提供有用的澄清问题!

0 个答案:

没有答案