Audio Player во Fragment

329
09 июня 2017, 09:56

Есть PageViewer, состоящий из нескольких фрагментов. На данный момент фрагментов 3. При переключении фрагментов в этом PageViewer сбрасывается seekBar во фрагменте с плеером и кнопка play перестает работать. Код MainActivity:

public class MainActivity extends AppCompatActivity {
    ViewPager viewPager;
    RecyclerView recyclerView;
    AudioPlayerFragment audioPlayerFragment = AudioPlayerFragment.newInstance();
    MapFragment mapFragment = MapFragment.newInstance();
    VkFragment vkFragment = VkFragment.newInstance();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        getSupportActionBar().hide();
        PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager(), audioPlayerFragment, mapFragment, vkFragment);
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        viewPager.setAdapter(pageAdapter);
    }
}

Код PageAdapter:

public class PageAdapter extends FragmentPagerAdapter {
    AudioPlayerFragment audioPlayerFragment;
    MapFragment mapFragment;
    VkFragment vkFragment;
    public PageAdapter(FragmentManager fragmentManager,AudioPlayerFragment audioPlayerFragment, MapFragment mapFragment, VkFragment vkFragment){
        super(fragmentManager);
        this.audioPlayerFragment = audioPlayerFragment;
        this.mapFragment = mapFragment;
        this.vkFragment = vkFragment;
    }
    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0: return audioPlayerFragment;
            case 1: return mapFragment;
            case 2: return vkFragment;
        }
        return null;
    }
    @Override
    public int getCount() {
        return 3;
    }
}

Код AudioPlayerFragment:

public class AudioPlayerFragment extends Fragment {
    private SquareImageView squareImageView;
    private MediaPlayer mediaPlayer;
    private SeekBar seekBarAudioPlayer;
    private ImageButton imageButtonAudioPlayerPlay;
    private final Handler handler = new Handler();
    boolean isPlay = false;
    @Override
    public void onResume(){
        super.onResume();
        seekBarAudioPlayer.setProgress(mediaPlayer.getCurrentPosition());
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View view = inflater.inflate(R.layout.audio_player,container,false);
        imageButtonAudioPlayerPlay = (ImageButton)view.findViewById(R.id.imageButtonAudioPlayerPlay);
        squareImageView = (SquareImageView)view.findViewById(R.id.squareImageViewAlbumPic);
        squareImageView.setImageResource(R.drawable.bnv_translator);
        mediaPlayer = MediaPlayer.create(view.getContext(), R.raw.believer);
        seekBarAudioPlayer = (SeekBar)view.findViewById(R.id.seekBarAudioPlayer);
        seekBarAudioPlayer.setMax(mediaPlayer.getDuration());
        seekBarAudioPlayer.setOnTouchListener(new View.OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(mediaPlayer.isPlaying()){
                    mediaPlayer.seekTo(seekBarAudioPlayer.getProgress());
                }
                return false;
            }
        });
        imageButtonAudioPlayerPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 if (!isPlay) {
                try {
                    mediaPlayer.start();
                    startPlayProgressUpdater();
                    isPlay = true;
                } catch (IllegalStateException e) {
                    mediaPlayer.pause();
                    isPlay = false;
                }
            }else
            {
                mediaPlayer.pause();
                isPlay = false;
            }
        }
        });
        seekBarAudioPlayer.setProgress(mediaPlayer.getCurrentPosition());
        return view;
    }
    public static AudioPlayerFragment newInstance(){
        AudioPlayerFragment audioPlayerFragment = new AudioPlayerFragment();
        Bundle bundle = new Bundle();
        audioPlayerFragment.setArguments(bundle);
        return audioPlayerFragment;
    }
    public void startPlayProgressUpdater(){
        seekBarAudioPlayer.setProgress(mediaPlayer.getCurrentPosition());
        if (mediaPlayer.isPlaying()){
            Runnable notification = new Runnable() {
                @Override
                public void run() {
                    startPlayProgressUpdater();
                }
            };
            handler.postDelayed(notification, 1000);
        }
        else {
            mediaPlayer.pause();
            //seekBarAudioPlayer.setProgress(0);
        }
    }
}

Заранее благодарю за вашу помощь!

READ ALSO
удалить дубликаты в векторе

удалить дубликаты в векторе

Как удалить повторяющейся элементы в векторе ?

236
Ошибка при создании задания SQL Server Java

Ошибка при создании задания SQL Server Java

Cервлет должен создавать задание, но выводиться ошибка "Неправильный синтаксис около конструкции "GO" Не могу понять в чем ошибка, может кто-то...

350
android.os.NetworkOnMainThreadException при попытке использования getLocalHost() [дубликат]

android.os.NetworkOnMainThreadException при попытке использования getLocalHost() [дубликат]

Данный вопрос уже был задан и имеет решение:

280
из MySQL в JTable

из MySQL в JTable

Имею много таблиц в БД с разных кол-вом полей, которые необходимо вывести в JTableИдея такова:

346