Я новичок в Android, и у меня возникла проблема с отключением видео в OnClickListener внутри фрагмента.Я использую 3 разных динамических фрагмента.мой второй фрагмент должен воспроизвести видео.У меня есть кнопка отключения звука в этом фрагменте, чтобы сделать мое видео выключенным и включенным после повторного нажатия.Я использую OnPreparedListener в моем Button OnClickListener, но он абсолютно ничего не делает без ошибок !!удивительно, это работает хорошо, когда я использую это вне моего Button OnClickListener.так почему это произошло и как я могу использовать его внутри OnClickListener?
вот мой код MainActivity
public class MainActivity extends AppCompatActivity implements FirstFragment.OnFirstFragmentInteractionListener , SecondFragment.OnSecondFragmentInteractionListener , ThirdFragment.OnLastFragmentInteractionListener {
private android.support.v4.app.FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// first transaction for my first fragment
fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.main_frame, new FirstFragment());
fragmentTransaction.commit();
}
@Override
public void onFirstFragmentInteraction(Fragment a) {// it make a
//transaction after I finish my first fragment to second fragment I do not
//copy the first fragment codes for brief
FragmentTransaction newTransaction =
fragmentManager.beginTransaction();
newTransaction.replace(R.id.main_frame, new SecondFragment());
newTransaction.commit();
if(a != null)
newTransaction.remove(a); // I use "a" to passes first fragment
// to remove it here
}
@Override
public void onVideoCompletListenerIntaction() { // it happened when
// my second fragment video finished and it work well
FragmentTransaction newTransaction =
fragmentManager.beginTransaction();
newTransaction.replace(R.id.main_frame, new ThirdFragment());
newTransaction.commit();
}
и вот мой фрагмент видео
public class SecondFragment extends Fragment {
private OnSecondFragmentInteractionListener onSecondFragInteaction;
private View view;
private ImageButton ibntMuteSecFrag;
private VideoView videoViewMain;
private AudioManager audio;
private float videoVolume;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_second, container, false);
ibntMuteSecFrag = view.findViewById(R.id.ibtn_mute_second_frag);
videoViewMain = view.findViewById(R.id.vdvw_main_clip);
audio = (AudioManager)
getActivity().getSystemService(Context.AUDIO_SERVICE);
String videoPath = "android.resource://" +
getActivity().getPackageName() + "/" + R.raw.my_wedding_main_video;
videoViewMain.setVideoPath(videoPath);
videoViewMain.start();
ibntMuteSecFrag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onIbntMuteSecFragListener();
}
});
return view;
}
public void onIbntMuteSecFragListener() {
if (flagIsMuteBtnPress)
videoVolume = 0;
else
videoVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
videoViewMain.setOnPreparedListener(new
MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
// compiler never get here, I use Log.d and notice that
mp.setVolume(videoVolume, videoVolume);
}
});
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof
SecondFragment.OnSecondFragmentInteractionListener) {
onSecondFragInteaction =
(SecondFragment.OnSecondFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
onSecondFragInteaction = null;
}
public interface OnSecondFragmentInteractionListener {
void onVideoCompletListenerIntaction();
}