Я думаю, что ваш MatrixCursor фактически нулевой. Когда вы поворачиваете телефон, как вы знаете, деятельность разрушается. Таким образом, комплект saveinstanceState может быть не нулевым, но MatixCursor не будет повторно инициализирован. Да, он статический, но у меня есть ощущение, что по какой-то причине он не загружен в тот же загрузчик классов ... хорошо, что статика не будет слишком надежной.
Существует метод, который наиболее неловко назван:
onRetainNonConfigurationInstance ()
Что, я думаю, поможет вам решить это дело. Поэтому, если вы вернете туда свой экземпляр MatrixCursor, вы можете в последующем вызове onCreate () использовать getLastNonConfigurationInstance () для считывания данных обратно. Он не гарантированно будет вызван, поэтому вам все равно придется обрабатывать случай, когда у вас нет сохраненного состояния. Надеюсь, это поможет.
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();
}