为什么我不能访问我的代码里面的“关于准备监听”,“上点击收听”内片段静音我的视频?

问题描述 投票:0回答:3

我在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();
}
android android-studio android-fragments
3个回答
0
投票

尝试

SecondFragment.this.onIbntMuteSecFragListener();

那是因为你实际上是在匿名类View.OnclickListener()和这种情况下没有实现的方法尝试从片段的那个外范围达到...


0
投票

您可以设置MediaPlayer.OnPreparedListener()为时已晚。据我所知,你开始播放视频,你设置监听之前。所以,当监听器设置播放器“准备事件”已经过去。

首先,你需要设置监听器,然后才开始播放视频。在这种情况下,监听器将被触发。


0
投票

如果你onPreparedListener.onPrepared()之前设置它的onStart()只调用。 该state diagram说明了一个MediaPlayer对象必须先进入准备状态回放才能启动。 因此,首先设置onPreparedListener.onPrepared(),然后调用videoViewMain.start();

© www.soinside.com 2019 - 2024. All rights reserved.