我是Android开发的新手,我研究了这个网站的帖子并尝试了许多不同的建议,但仍然无法解决问题。
我这里参考实现拖放列表视图(即用户可以长按并拖动列表项以重新排列位置。我创建了一个自定义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();
}
}
};
我的问题是:当我将一个项目拖放到一个新位置时,它被正确替换了。但在那之后,当我再次尝试拖动该项目时,会显示该位置的前一个项目。如果我将应用程序置于后台然后再将其放回,则可以恢复此问题。
在“onDrop”中,列表视图无效。我从这个站点了解到 invalidateViews() 不会立即运行,但似乎 invalidateViews() 在我将应用程序放入后台之前永远不会运行?!如何强制列表视图重绘自身?
更多信息:该应用程序在模拟器中正常运行,但这个问题发生在我的 Galaxy 手机(4.1.2)中。
希望有人能帮忙,非常感谢!