编辑后:我的主应用程序屏幕使用GridView控件来显示图标的网格这个问题可能与BaseAdapter causing ListView to go out of order when scrolled的Android 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中图标的顺序反转。当我旋转屏幕回到它开始的方向时,一切都恢复正常。这里发生了什么?
说得过早。我花了一些时间进行测试,发现如果按下首选项按钮(因此首选项活动出现),旋转屏幕,然后点击后退按钮,仍然可能导致问题。必须有更好的解决办法,而不必在屏幕旋转或可能旋转时重新初始化所有内容。 – 2010-06-19 21:03:58
实际上,Android在方向更改时调用'onDestroy'和'onCreate'方法,因此您必须重新初始化UI。在这种情况下,你可以做的是试图通过你自己来处理这个'轮换',而不是让操作系统去做。你可以通过添加到清单上的活动引用来实现:'android:configChanges =“keyboardHidden | orientation”' – Cristian 2010-06-19 21:24:17
我已经在我的清单中有该行。我也无法删除它们,并且每次都将它放到'onCreate'上,因为尽管在这个特定的活动中它并不重要,但我也有类似的地方。 – 2010-06-21 14:40:47