2016-12-05 11 views
-2

у меня есть этот код:Как использовать метод экземпляра перед созданием экземпляра класса?

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); 
     } 
    } 

, если вы посмотрите на коде выше вы отмечает, что существует releaseMediaPlayer() метода и внутри этого метода я назвал mMediaPlayer.release() до создания экземпляра MediaPlayer класса я называюсь releaseMediaPlayer(), и коды работа нет ошибки, так как это может работать метод вызова экземпляра перед созданием экземпляра класса?

+0

У вас есть проверка «null». Даже если 'mMediaPlaer' не создается при вызове' releaseMediaPlayer() ', он не будет сбой, потому что' mMediaPlayer.release() 'не будет вызываться. –

+0

нет работы с кодом и нет никаких ошибок или проблем –

ответ

1

С вашего кода вы проверяете, является ли mMediaplayer! = Null. Если у вас нет экземпляра медиапланера, вы не пройдете, если условие и 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(); метод даже нет экземпляра, например, если я хочу вызвать метод setText() в классе TextView, я должен содержать ссылку TextView в ссылочной переменной, прежде чем я смогу использовать его метод, но в моем примере даже mMediaPlayer = null я могу вызвать методы MediaPlayer здесь есть какой-то образец? –

+0

Ваш код: if (mMediaPlayer! = Null) { – Orbite

+0

да спасибо за предупреждение, но посмотрите на меня вопрос выше, можете ли вы ответить мне –

 Смежные вопросы

  • Нет связанных вопросов^_^