私はこのコードを持って:あなたは上記のコードを見ては、そこ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);
}
}
をエラーがないので、どのようにしてクラスのインスタンスを作成する前にこのインスタンスメソッドを呼び出すことができますか?
「ヌル」チェックがあります。 'mMediaPlaer'が' releaseMediaPlayer() 'を呼び出すときに作成されなくても、' mMediaPlayer.release() 'が呼び出されないのでクラッシュしません。 –
コード作業がなく、エラーや問題はありません –