我正在尝试执行类似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调用这个方法,但也没有运气。
实现这个目标的正确方法是什么?
答案 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));
}
}