1

ユーザーがギャラリーを閲覧し、選択した画像を選択し、その選択を変更せずにギャラリーを閲覧し続けることができるギャラリーがあります。これは、onItemSelectedを使用して、選択している(つまり、クリックして)画像が(ギャラリーの動きによって)すでに選択されている画像であるかどうかを確認することで機能します。それで:

  1. ユーザーはギャラリーを前後に移動します。
  2. ユーザーは好みの画像を決定し、ギャラリーをその画像の中央に配置します。
  3. ユーザーが画像をクリックすると、画像が「選択」され、緑色の境界線が表示されます。
  4. ユーザーは、現在中央に配置されている画像が自動的に「選択」されることなく、ギャラリー内を前後に移動し続けることができます。

これで結構です。ただし、現在、画像の選択中に向きの変更を許可しようとしています。私が見つけたのは、すべてのonConfigChangedコードが実行された後にonItemSelectedがギャラリーで呼び出されることです。

そのため、onConfigChangeでパラメーター(つまり、向きを変更する前にギャラリーがどのインデックスにあったか)を設定してから、initialiseUIメソッドを呼び出します。これは正常に実行され、向きを変更する前に配置されていたのと同じインデックスにギャラリーを配置するなど、必要なすべてを設定します。ただし、中央の画像で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イベントの経験がありますか?何か案は?必要に応じて、さらにコードを投稿できます。助けてくれてありがとう。

4

3 に答える 3

3

マニフェストに android:configChanges="orientation" を入れてみましたか?

于 2012-04-16T11:08:36.790 に答える
1

ブール値 (おそらくフィールド) を onResume/onCreate に入れることはできませんか?

configIsChanging = true;onPause と onResume の 2 つのメソッドで。

@Override    
public void onConfigurationChanged(Configuration newConfig)
{
   if(!configIsChanging){
       tempConfigDisplayedIndex = mGallery.getSelectedItemPosition(); 

       super.onConfigurationChanged(newConfig);

       setContentView(R.layout.take_questionnaire);

       initialiseUI(); 
   }else{
       configIsChanging = false;
   }
}

これは私にとってはうまくいきます。

于 2012-04-16T11:50:47.653 に答える
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
}
于 2012-04-18T12:20:04.747 に答える