2016-12-05 12 views
-2

私はこのコードを持って:あなたは上記のコードを見ては、そこreleaseMediaPlayer()方法があり、このメソッドの内部で、私は前MediaPlayer私はreleaseMediaPlayer()というクラス、およびコードの仕事のインスタンスを作成し、mMediaPlayer.release()と呼ばれることに注意している場合クラスのインスタンスを作成する前にインスタンスメソッドを使用する方法はありますか?

public class NumbersFragment extends Fragment { 

    /** Handles playback of all the sound files */ 
    private MediaPlayer mMediaPlayer; 

     private MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mediaPlayer) { 
      // Now that the sound file has finished playing, release the media player resources. 
      releaseMediaPlayer(); 
     } 
    }; 


@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.word_list, container, false); 

     // Create a list of words 
     final ArrayList<Word> words = new ArrayList<Word>(); 
     words.add(new Word(R.string.number_one, 
       R.drawable.number_one, R.raw.number_one)); 
     words.add(new Word(R.string.number_two, 
       R.drawable.number_two, R.raw.number_two)); 
     words.add(new Word(R.string.number_three, 
       R.drawable.number_three, R.raw.number_three)); 
     words.add(new Word(R.string.number_four, 
       R.drawable.number_four, R.raw.number_four)); 
     words.add(new Word(R.string.number_five, 
       R.drawable.number_five, R.raw.number_five)); 
     words.add(new Word(R.string.number_six, 
       R.drawable.number_six, R.raw.number_six)); 
     words.add(new Word(R.string.number_seven, 
       R.drawable.number_seven, R.raw.number_seven)); 
     words.add(new Word(R.string.number_eight, 
       R.drawable.number_eight, R.raw.number_eight)); 
     words.add(new Word(R.string.number_nine, 
       R.drawable.number_nine, R.raw.number_nine)); 
     words.add(new Word(R.string.number_ten, 
       R.drawable.number_ten, R.raw.number_ten)); 

     // Create an {@link WordAdapter}, whose data source is a list of {@link Word}s. The 
     // adapter knows how to create list items for each item in the list. 
     WordAdapter adapter = new WordAdapter(getActivity(), words, R.color.category_numbers); 

     // Find the {@link ListView} object in the view hierarchy of the {@link Activity}. 
     // There should be a {@link ListView} with the view ID called list, which is declared in the 
     // word_list.xml layout file. 
     ListView listView = (ListView) rootView.findViewById(R.id.list); 

     // Make the {@link ListView} use the {@link WordAdapter} we created above, so that the 
     // {@link ListView} will display list items for each {@link Word} in the list. 
     listView.setAdapter(adapter); 

     // Set a click listener to play the audio when the list item is clicked on 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
       // Release the media player if it currently exists because we are about to 
       // play a different sound file 
       releaseMediaPlayer(); 

       // Get the {@link Word} object at the given position the user clicked on 
       Word word = words.get(position); 

      // Create and setup the {@link MediaPlayer} for the audio resource associated 
        // with the current word 
       mMediaPlayer = MediaPlayer.create(getActivity(), word.getAudioResourceId()); 

        // Start the audio file 
        mMediaPlayer.start(); 

        // Setup a listener on the media player, so that we can stop and release the 
        // media player once the sound has finished playing. 
        mMediaPlayer.setOnCompletionListener(mCompletionListener); 
       } 
      } 
     }); 

     return rootView; 
    } 


private void releaseMediaPlayer() { 
     // If the media player is not null, then it may be currently playing a sound. 
     if (mMediaPlayer != null) { 
      // Regardless of the current state of the media player, release its resources 
      // because we no longer need it. 
      mMediaPlayer.release(); 

      // Set the media player back to null. For our code, we've decided that 
      // setting the media player to null is an easy way to tell that the media player 
      // is not configured to play an audio file at the moment. 
      mMediaPlayer = null; 

      // Regardless of whether or not we were granted audio focus, abandon it. This also 
      // unregisters the AudioFocusChangeListener so we don't get anymore callbacks. 
      mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener); 
     } 
    } 

をエラーがないので、どのようにしてクラスのインスタンスを作成する前にこのインスタンスメソッドを呼び出すことができますか?

+0

「ヌル」チェックがあります。 'mMediaPlaer'が' releaseMediaPlayer() 'を呼び出すときに作成されなくても、' mMediaPlayer.release() 'が呼び出されないのでクラッシュしません。 –

+0

コード作業がなく、エラーや問題はありません –

答えて

1

あなたのコードから、mMediaplayer!= nullであるかどうかを確認します。 mediaplayerのインスタンスがない場合は、conditionとmMediaPlayer.release()が実行されない場合は合格しません。

private void releaseMediaPlayer() { 
    // If the media player is not null, then it may be currently playing a sound. 
    if (mMediaPlayer != null) { 
     // Regardless of the current state of the media player, release its resources 
     // because we no longer need it. 
     mMediaPlayer.release(); 

     // Set the media player back to null. For our code, we've decided that 
     // setting the media player to null is an easy way to tell that the media player 
     // is not configured to play an audio file at the moment. 
     mMediaPlayer = null; 

     // Regardless of whether or not we were granted audio focus, abandon it. This also 
     // unregisters the AudioFocusChangeListener so we don't get anymore callbacks. 
     mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener); 
    } 
+0

どうすればrelease()を呼び出すことができますか?私はそれのメソッドを使用することができますが、私の例でも、mMediaPlayer = null私はMediaPlayerのメソッドを呼び出すことができます参照変数をTextViewの参照を保持する必要がある場合(たとえば、インスタンスがありません)ここにはどんなパターンがありますか? –

+0

あなたのコード: if(mMediaPlayer!= null){ – Orbite

+0

はい、ありがとうございました。上記の私に質問してください。 –

関連する問題