РЕДАКТИРОВАТЬ: Эта проблема может быть связана с BaseAdapter, вызывая выход ListView из строя при прокрутке
Мой основной экран приложения использует GridView для отображения сетки значков. Каждый значок имеет изображение, имя и намерение. У меня есть активность для обработки изменений ориентации, чтобы я мог изменить фон. Метод onCreate устанавливает GridView с 3-мя иконками теста, которые ничего не делают, и иконкой предпочтений, которая открывает PreferencesActivity:
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gv = (GridView) findViewById(R.id.main_grid);
if (getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE)
gv.setBackgroundResource(R.drawable.main_bg_horiz);
else
gv.setBackgroundResource(R.drawable.main_bg);
ArrayList<Icon> icons = new ArrayList<Icon>();
icons.add(new Icon("Test 1", R.drawable.test1, null));
icons.add(new Icon("Test 2", R.drawable.test2, null));
icons.add(new Icon("Test 3", R.drawable.test3, null));
icons.add(new Icon("Preferences", R.drawable.perferences, new Intent(this,
AlertPreferences.class)));
IconAdapter ia = new IconAdapter(icons);
gv.setAdapter(ia);
gv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3){
Intent i = ((IconAdapter)arg0.getAdapter()).getItem(arg2).getIntent();
if (i != null)
HomeActivity.this.startActivity(i);
}
});
И onConfigurationChanged очень прост:
super.onConfigurationChanged(newConfig);
GridView gv = (GridView) findViewById(R.id.main_grid);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
gv.setBackgroundResource(R.drawable.main_bg_horiz);
else
gv.setBackgroundResource(R.drawable.main_bg);
Фон меняется очень хорошо, но код представляет новую проблему с GridView. Какую бы ориентацию я ни запускал, приложение в ней работает просто отлично. Однако, когда я меняю ориентацию, порядок значков в GridView меняется на противоположный. И когда я поворачиваю экран обратно в ту ориентацию, в которой он был, все возвращается к нормальной жизни. Что здесь происходит?