处理方向更改后的Android GridView逆转
-
28-09-2019 - |
题
编辑: 这个问题可能与 滚动时导致ListView的baseadapter滚动订单
我的主要应用程序屏幕使用GridView显示图标网格。每个图标都有一个图像,名称和意图。我的活动设置以处理方向更改,因此我可以更改背景。 OnCreate方法用3个无需执行任何操作的测试图标设置了GridView,并且偏好图标可以打开偏好性:
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);
}
});
而且configurationchanged非常简单:
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中图标的顺序会逆转。当我将屏幕旋转回到启动的方向时,一切都会恢复正常。这里发生了什么?
解决方案
实际上,这是自定义适配器的问题。问题和解决方案都在这里 滚动时导致ListView的baseadapter滚动订单
其他提示
尝试将要设置用户界面的逻辑分开:
GridView gv;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
configureYourUIHere();
}
public void configureYourUIHere(){
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);
}
});
}
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
configureYourUIHere();
}
不隶属于 StackOverflow