1

mediaplayer でアプリケーションを開発しています。2 つのレイアウトで画面の向きを処理しました。onsavedInstancestate と onrestoreinstancesstate を使用しました。画面の回転時にレイアウトが変更され、メディアプレーヤーの状態は保持されますが、UI が応答しません。

mediaplayer オブジェクトの状態を保存して保持しました

   public  Object  onRetainNonConfigurationInstance() 
         {
                HashMap<String,Object> player = new HashMap<String,Object>();
                MediaPlayer instance = mp;
                mp = null;
                MediaPlayer instance1 = mp1;
                mp1 = null;
                player.put("mp", instance);
                player.put("mp1", instance1);
                return player;

          }

 if(getLastNonConfigurationInstance()!=null)
                {

                 playerhandle = (HashMap<String, Object>) getLastNonConfigurationInstance();
                 mp = (MediaPlayer)playerhandle.get("mp");
                 if (mp == null) 
                 {
                    mp = new MediaPlayer();
                 }
                 mp1 = (MediaPlayer)playerhandle.get("mp1");
                 if (mp1 == null) 
                 {
                   mp1 = new MediaPlayer();
                 }
                 }        

また、 onsaveinstancestate および onrestoreinstancestate でデータを保持します。メディアプレーヤーは、画面の向きを変更した後も状態を保持します (オーディオは画面の向きで解釈されずに再生されます) が、向きの変更後に UI が応答しません。問題を把握できません.....

4

1 に答える 1

0

onCreate でクリック リスナーをボタンに追加する場合は、onConfigurationChanged で作成された新しいボタン オブジェクトにリスナーを追加する必要があります。

コードでクリック リスナーを設定する代わりに、XML ファイルで android:onClick 属性を使用することを検討してください。これは、この問題を回避する良い方法です。

XML から android:onClick を使用するには、次のようにします。

<Button
    android:id="@+id/addnote"
    android:onClick="addNoteMethod"
    ....
    />

次に、アクティビティでメソッドを定義します。

public void addNoteMethod(View view) {
    createNote();
}

android:onClick メソッドの名前は完全に任意です。アクティビティ内のメソッドを適切なシグネチャ (void (View)) と一致させる必要があります。このメソッドは、OnClickListener に対して onClick メソッドが呼び出されるのとまったく同じ方法で、クリックがあると呼び出されます。

android:onClick を使用する場合、setOnClickListener を呼び出す必要はありません (または、他の目的で必要でない限り、onCreate でボタンへの参照を取得することもできます)。

于 2012-11-06T04:31:39.560 に答える