如何强制ListView无效

时间:2013-09-04 14:35:30

标签: android drag-and-drop

我是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)中。

希望有人能提供帮助,非常感谢!

1 个答案:

答案 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();

    }
}

};