我在android系统是新的,我在片段中的静音里面OnClickListener我的视频成为了一个问题。我用3个不同的动态片段。我的第二个片段具有播放视频。我在那个片段的静音按钮,使我的视频静音和取消后,我再次按下它。我在按钮OnClickListener使用OnPreparedListener,但它绝对什么都不做,没有任何错误!令人惊讶的是,当我使用我的按钮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();
}
尝试
SecondFragment.this.onIbntMuteSecFragListener();
那是因为你实际上是在匿名类View.OnclickListener()和这种情况下没有实现的方法尝试从片段的那个外范围达到...
您可以设置MediaPlayer.OnPreparedListener()为时已晚。据我所知,你开始播放视频,你设置监听之前。所以,当监听器设置播放器“准备事件”已经过去。
首先,你需要设置监听器,然后才开始播放视频。在这种情况下,监听器将被触发。
如果你onPreparedListener.onPrepared()
之前设置它的onStart()
只调用。
该state diagram说明了一个MediaPlayer对象必须先进入准备状态回放才能启动。
因此,首先设置onPreparedListener.onPrepared()
,然后调用videoViewMain.start();
。