我有一个图库,允许用户浏览图库,选择图像作为他们的选择,并继续浏览图库而不更改选择。这通过使用onItemSelected来查看他们正在选择的图像(即,通过点击)是否已经选择了图像(通过图库的动作)。所以:
这很好。但是,我现在尝试在选择图像时允许方向更改,我发现在执行完所有onConfigChanged代码后,在Gallery上调用onItemSelected。
所以onConfigChange我设置了参数(即在方向改变之前Gallery所处的索引),然后我调用了我的initialiseUI方法。这会成功执行并设置所需的一切,包括将Gallery定位在方向更改之前定位的相同索引处。但是在居中的图像上调用onItemSelected。这会导致选择居中的图像作为他们的选择(绿色边框等),而无需用户点击它。
我尝试使用布尔标志“configIsChanging”,仅在configIsChanging为false时执行onItemSelected代码。不幸的是,这似乎不起作用,因为在onConfigChange完成后调用onItemSelected,并且到那时该标志已被重置为false。
@Override
public void onConfigurationChanged(Configuration newConfig) {
configChanging = true;
tempConfigDisplayedIndex = mGallery.getSelectedItemPosition();
super.onConfigurationChanged(newConfig);
setContentView(R.layout.take_questionnaire);
initialiseUI();
configChanging = false;
}
有没有人对流氓onItemSelected活动有过任何经验?有任何想法吗?如果需要,我可以发布更多代码。非常感谢任何帮助。
答案 0 :(得分:3)
你试过把你的清单中的android:configChanges =“orientation”放进去吗?
答案 1 :(得分:1)
你不能把你的布尔值(可能是一个字段)放在onResume / onCreate中吗?
configIsChanging = true;
在你的两个方法onPause和onResume。
@Override
public void onConfigurationChanged(Configuration newConfig)
{
if(!configIsChanging){
tempConfigDisplayedIndex = mGallery.getSelectedItemPosition();
super.onConfigurationChanged(newConfig);
setContentView(R.layout.take_questionnaire);
initialiseUI();
}else{
configIsChanging = false;
}
}
这适合我。
答案 2 :(得分:0)
继续@ Gabriel的回答后,我使用以下代码片段解决了问题。它与Gabriel的代码略有不同,我遗漏了别人不会关心的内容:)
@Override
protected void onResume() {
super.onResume();
configChanging = true;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (mAdapter.selectedIndex > -1) {
tempConfigSelectedIndex = mAdapter.selectedIndex;
}
super.onConfigurationChanged(newConfig);
if (configChanging) {
tempConfigDisplayedIndex = mGallery.getSelectedItemPosition();
setContentView(R.layout.take_questionnaire);
initialiseUI();
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
if (!configChanging){
// code here to execute only when user clicks
}
configChanging = false;
// code here to execute when either user clicks OR config is changed
}