我是Android开发的新手,我研究了这个网站的帖子并尝试了很多不同的建议,但仍然无法解决问题。
我引用here来实现drop-& -drop列表视图(即用户可以长按并拖动列表项以重新排序位置。我创建了一个自定义ListView,一个Adapter和一个ListActivity。以下是ListActivity代码的一部分:
public class DragNDropListActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dragndroplistview);
ArrayList<String> content = new ArrayList<String>(mListContent.length);
for (int i=0; i < mListContent.length; i++) {
content.add(mListContent[i]);
}
setListAdapter(new DragNDropAdapter(this, new int[]{R.layout.dragitem}, new int[]{R.id.TextView01}, content));//new DragNDropAdapter(this,content)
ListView listView = getListView();
if (listView instanceof DragNDropListView) {
((DragNDropListView) listView).setDropListener(mDropListener);
((DragNDropListView) listView).setRemoveListener(mRemoveListener);
((DragNDropListView) listView).setDragListener(mDragListener);
}
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.i("", "OnItemClick");
}
});
}
private DropListener mDropListener =
new DropListener() {
public void onDrop(int from, int to) {
ListAdapter adapter = getListAdapter();
if (adapter instanceof DragNDropAdapter) {
((DragNDropAdapter)adapter).onDrop(from, to);
getListView().invalidateViews();
}
}
};
我的问题是: 当我拖着&amp;将物品放到新位置,它被正确更换。但在那之后,当我再次尝试拖动该项目时,会显示该位置的上一个项目。如果我将应用程序置于后台然后再将其重新放回,则可以恢复此问题。
在“onDrop”内,列表视图无效。我从这个站点了解到invalidateViews()没有立即运行,但似乎invalidateViews()从未运行,直到我把App放到后台?如何强制列表视图重绘?
更多信息:应用程序在模拟器中正常运行,但此问题发生在我的Galaxy手机(4.1.2)中。
希望有人能提供帮助,非常感谢!
答案 0 :(得分:0)
检查这是否有效:
private DropListener mDropListener =
new DropListener() {
public void onDrop(int from, int to) {
ListAdapter adapter = getListAdapter();
if (adapter instanceof DragNDropAdapter) {
((DragNDropAdapter)adapter).notifyDataSetChanged();
((DragNDropAdapter)adapter).onDrop(from, to);
getListView().invalidate();
}
}
};