Android:从onItemLongClick修改视图的背景

时间:2014-10-02 19:51:32

标签: android android-listview contextual-action-bar

从TabHost中包含的片段的列表视图中,我实现了CAB以及longPressed(选定)行的突出显示。这完美运行> = api 14.但是,我支持api> 8.

在api 8中,我看到奇怪的行为,有时候longPressing列表项时列表中的错误视图会突出显示。似乎根据列表中可见的行数确定突出显示是否有效。这非常令人困惑,因为执行背景颜色更改的方法是使用传递给它的视图,并且位置参数确实是正确的。

这是一个错误还是我错过了什么?

 listView.setAdapter(
            new myAdapter(
                    inflater,
                    tvSeason)
    );
    listView.setOnItemLongClickListener( new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            if (mActionMode != null) {
                dismissActionMode();
                return false;
            }
            // Start the CAB using the ActionMode.Callback defined above
            mActionMode = getSherlockActivity().startActionMode(mActionModeCallback);
            view.setSelected(true);

            selectedTvEpisode = (TvEpisode)listView.getAdapter().getItem(position);
            mActionMode.setTitle(MyApp.getResourceString(R.string.tv_episode_number, selectedTvEpisode.getNumber()));

    view.setBackgroundColor(getActivity().getResources().getColor(R.color.lime));
            selectedView = view;
            return true;
        }
    });

1 个答案:

答案 0 :(得分:1)

小心,不要设置那样的视图背景颜色!请记住:ListView中的观点会被回收。您应该做的是获取数据项,设置选定的标记,然后在notifyDataSetChanged()中调用Adapter。根据{{​​1}}中选定的标记设置背景。