如何在更改方向时重新绘制listview项目

时间:2014-02-22 17:20:16

标签: android

我正在尝试执行类似GMail应用程序的操作:当长时间触摸多个列表视图项时,它们的背景颜色会发生变化,以便用户注意到发生了某些事情。

我的问题是在更改设备方向时,以视觉方式选择这些项目(更改背景颜色)。我试着运气不好:

ListView lv = getListView();
ItemAdapter adapter = (ItemAdapter)lv.getAdapter();
if (adapter == null) return;

for (Item q : mSelectedItems) {
    int position = adapter.getItemPosition(q);
    if (position == -1) continue;

    View itemView = lv.getChildAt(position);
    if (itemView == null) continue;

    itemView.setBackgroundColor(getResources().getColor(R.color.orange));
}

我从onRestoreInstanceState()回调中调用此方法,但是我在itemView中收到一个null,因为看起来listView还没有被填满,所以目前没有子进程。我试图从onResume调用这个方法,但也没有运气。

实现这个目标的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。实现此目的的正确方法是创建用于填充视图的自定义适配器。创建提供上下文的适配器(具有应该以这种方式或那种方式绘制项目的信息的Activity)并调用它来获取必须更改其背景的项目。在列表视图上进行迭代绘制时,如果当前项目是其中之一,则以不同方式绘制它。例如:

public View getView(int position, View convertView, ViewGroup parent) {
...
RelativeLayout itemLayout =
        (RelativeLayout) LayoutInflater.from(mContext).inflate(R.layout.my_layout, parent,
        false);
    if (((MyActivity) mContext).isItemSelected(item)) {
             itemLayout.setBackgroundColor(mContext.getResources().getColor(R.color.orange));
        }
    }