我希望手动重新排列 ListView 的顺序。我(想要)实现这一点的方法是点击要移动的项目,将该项目的背景设置为不同的颜色,存储它的位置(oldPosition),然后点击它要出现在下面的项目,最后重置原始项目位置的背景。
我用来执行此操作的代码是:-
List<String> catarray; // string array declared in main activity
ArrayAdapter<String> catadapter; // adapter for Spinner declared in main activity
ListView cats; // listview declared in list activity
ArrayAdapter<String> adapter; // adapter for listview declared in list activity
int oldPosition = -1;
cats.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (oldPosition < 0) {
oldPosition = position;
try {
dr = parent.getChildAt(position).getBackground();
parent.getChildAt(position).setBackgroundColor(Color.argb(255, 0, 153, 204));
}
catch (Exception e) {
}
}
else {
String item = PhotoActivity.catarray.remove(oldPosition);
PhotoActivity.catarray.add(position,item);
try {
parent.getChildAt(oldPosition).setBackground(dr);
}
catch (Exception e) {
}
oldPosition = -1;
changed = true;
PhotoActivity.catadapter.notifyDataSetChanged();
adapter.notifyDataSetChanged();
}
}
});
我遇到的问题是,如果列表大于显示的视图,那么我点击的两个项目都会改变背景,但低于可见范围的附加项目也会改变。
因此,例如,如果完整列表是 12 个项目长,其中前 8 个项目正在显示,如果我点击第二个项目,那么该项目和项目 11 (即第二个项目加一个低于可见范围)突出显示。
为什么会这样?
我该如何停止它,或者,如果我不能这样做,请重置错误突出显示的项目,因为它不可见,因此无法通过 parent.getChildAt ...