0

この種の質問は定期的に表示されます。これが以前にカバーされていれば申し訳ありませんが、私は初心者であり、適切な答えを見つけることができませんでした。クラスとアクティビティ間のコミュニケーションの正しい実装を扱います。

ギャラリーアプリを作りました。主なアクティビティは3Mainつあります。1つはパターンを使用してファイル名を検索することです。1Thumbつは、パターンに一致するすべての画像をグリッドビューのサムネイルとして表示し、Photoアクティビティは、の親指をクリックするとフルサイズの画像を開きますThumbs。ファイル名(配列)とグリッドビューでクリックされた親指の(an )をPhoto介してアクティビティに渡します。Intentpositionint

この3番目Photoのアクティビティには、1つのビューしかTouchImageViewありません。aは、画像のショートクリックの場所(左、右、または中央)に応じて、前/次の切り替えとズームに適応しました。Photoさらに、 EXIF情報を表示するためにロングクリックリスナーを追加しました。

うまくいっていますが、実装に満足していません...いくつかのことが正しくありません。

私が経験している問題の1つは、画像の右側をクリックしてPhotoアクティビティの次の画像を表示すると、正常に切り替わりますが(position++)、デバイスを回転させると元の画像がposition表示されることです。

何が起こっているのかというPhotoと、画像を回転させると破壊され、何らかの理由でsuper.onCreate(savedInstanceState)、Extras(親アクティビティではなくでposition変更されたもののみ)を再度ロードすることなく、再起動します。Photo

startActivityForResultの代わりに試してみましたstartActivityが、失敗しました...

もちろん、positionデータを保存するために工夫したことはできますが、活動の仕組みがわからない「概念」があるはずなので、正しくやりたいと思っています。

誰かが私が間違っていることを説明してもらえますか?それは私が望むものを実装するための最良の方法であり、その理由は何ですか?

どうもありがとう!!!

4

1 に答える 1

3

このコードを試して、アクティビティの値を保存してください

Long value;

protected void onSaveInstanceState(Bundle onOrientChange) {
    super.onSaveInstanceState(onOrientChange);
    onOrientChange.putLong("myValue", value);  
}

そして、onCreate()で値を復元します。

public void onCreate(Bundle onOrientChange) {
  if (onOrientChange!= null){
   value = onOrientChange.getLong("myValue");
  }
}

通常、で状態を復元しますonCreate()。復元することも可能ですonRestoreInstanceState()が、あまり一般的ではありません。(onRestoreInstanceState()はの後onStart()に呼び出されますが、のonCreate()前に呼び出されonStart()ます。

putメソッドを使用して値を格納しますonSaveInstanceState()

于 2012-12-16T21:46:31.610 に答える