方向更改后,图库调用onItemSelected

时间:2012-04-16 11:05:09

标签: android gallery

我有一个图库,允许用户浏览图库,选择图像作为他们的选择,并继续浏览图库而不更改选择。这通过使用onItemSelected来查看他们正在选择的图像(即,通过点击)是否已经选择了图像(通过图库的动作)。所以:

  1. 用户在图库中前进和后退。
  2. 用户决定他们喜欢的图像并将图库置于其中心。
  3. 用户点击图片,它会被“选中”并被赋予绿色边框。
  4. 用户可以继续在图库中前进和后退,而不会自动“选中”当前居中的图像。
  5. 这很好。但是,我现在尝试在选择图像时允许方向更改,我发现在执行完所有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活动有过任何经验?有任何想法吗?如果需要,我可以发布更多代码。非常感谢任何帮助。

3 个答案:

答案 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
}