Вопрос

Я получаю странную проблему при освежей моего ListView, он отлично работает, пока устройство не будет вращено, а затем при обновлении его снова он полностью пропускается. Это может быть зафиксировано только путем вращения устройства снова (так как он также обновляется в onCreate()) Но потом всякий раз, когда его снова обновляются, он идет пустой. Проблема сохраняется, пока приложение не будет перезапущено.

РЕДАКТИРОВАТЬ:

Какой-то код:

private ListView contactlist = null;
private static MatrixCursor matrixcursor = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    contactlist = (ListView) findViewById(R.id.contactlist);
    if (savedInstanceState == null) {
        matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
    } else {
        contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
    }
}

Это работает нормально, но всякий раз, когда:

contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));

называется после onCreate() и после того, как устройство повернуто ListView идет пустой.

Это было полезно?

Решение 2

Ну мне удалось исправить это, делая contactlist Статический:

 private static ListView contactlist = null;

Я понятия не имею, почему это сработало (только что проводил процесс / ошибку на пару часов), поэтому, если кто-то может объяснить, что было бы здорово.

Другие советы

Я думаю, что ваш MatrixCursor на самом деле нулевой. Когда вы поворачиваете телефон, как вы знаете, активность разрушается. Таким образом, пакет SavedInstanceState может не быть нулевым, но MatixCursor, затем не ранилизован. Да, это статично, но у меня есть ощущение, если это на некоторое вероятность, что он не загружен в том же классном загрузке ... ну этот статический не будет слишком надежен.

Есть метод, который наиболее неловко назван:

onretainnonconfigurationSstance ()

Что я думаю, поможет вам решить этот случай. Поэтому, если вы вернете свой экземпляр MatrixCursor, вы можете в более позднем вызове oncreate () использовать getlastnonconfigurationSstance (), чтобы прочитать данные обратно. Это не гарантированно, так что вам все равно нужно будет обрабатывать случай, когда у вас нет сохраненного состояния. Надеюсь, это поможет.

private ListView contactlist = null;
private MatrixCursor matrixcursor = null;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    contactlist = (ListView) findViewById(R.id.contactlist);
    matrixcursor = (MatrixCursor)getLastNonConfigurationInstance();
    if (matrixcursor == null) {
        matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
    } else {
        contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
    }
}

public MatrixCursor onRetainNonConfigurationInstance() {
return matrixcuror;
}

public MatrixCuror getLastNonConfigurationInstance() {
return (MatrixCursor) super.getLastNonConfigurationInstance();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top