Я новичок в разработке Android, я изучил сообщения этого сайта и попробовал много разных предложений, но до сих пор не могу решить проблему.Как заставить ListView invalidate
Я имею в виду here реализовать нижепреведенного & -drop вид списка (т.е. пользователь может продолжительное нажатие и перетащить элемент списка, чтобы изменить порядок позицию. Я создал пользовательский элемент управления ListView, адаптер и 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).
Надеюсь, кто-то может помочь, большое спасибо!
Спасибо, Ритабан, до сих пор не повезло! –
NotifyDataSetChanged() должен появиться после onDrop(), поскольку данные обновляются внутри onDrop. –