【问题标题】:How to start a Media Player from MainActivity when i press button from a Fragment当我从片段中按下按钮时如何从 MainActivity 启动媒体播放器
【发布时间】:2019-03-04 01:46:21
【问题描述】:

我有按钮 oferton、atrape、smiders、imbecil、billetes 和 tonto, 我想做什么例如: 我想按下片段 Frag1 中的按钮 oferton ,然后启动 MainActivity 中的媒体播放器 momo1 我知道这是错误的,但我想知道当我按下 Fragment 的按钮时如何从 MainActivity 启动媒体播放器。

这是主活动

package com.example.mauri.miapp;

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {
  public MediaPlayer momo1;
  public MediaPlayer momo2;
  public MediaPlayer momo3;
  public MediaPlayer momo4;
  public MediaPlayer momo5;
  public MediaPlayer momo6;
  Frag1 f1;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     f1 = new Frag1();
     momo1 = MediaPlayer.create(this, R.raw.oferton);
     momo2 = MediaPlayer.create(this, R.raw.atrape);
     momo3 = MediaPlayer.create(this, R.raw.smiders);
     momo4 = MediaPlayer.create(this, R.raw.imbecil);
     momo5 = MediaPlayer.create(this, R.raw.billetes);
     momo6 = MediaPlayer.create(this, R.raw.tonto);
     android.app.FragmentManager manager = getFragmentManager();
     manager.beginTransaction().replace(R.id.LayoutContenedor, f1).commit();
  }

}

这是我的片段:Frag1

package com.example.mauri.miapp;

import android.app.Activity;
import android.os.Bundle;
import android.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;

public class Frag1 extends Fragment {
    public Frag1() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.i("fragmento01", "onCreateView");
        View vista = inflater.inflate(R.layout.fragment_frag1, container, false);

        ImageButton oferton = vista.findViewById(R.id.btn_oferton);
        ImageButton atrape = vista.findViewById(R.id.btn_atrape);
        ImageButton smiders = vista.findViewById(R.id.btn_smiders);
        ImageButton imbecil = vista.findViewById(R.id.btn_imbecil);
        ImageButton billetes = vista.findViewById(R.id.btn_billetes);
        ImageButton tonto = vista.findViewById(R.id.btn_tonto);

\\This is bad, but is a Example for what i whant to do
        oferton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                momo1.seekTo(0);
                momo1.start();
            }
        });
        atrape.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                momo2.seekTo(0);
                momo2.start();
            }
        });
        smiders.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                momo3.seekTo(0);
                momo3.start();
            }
        });
        imbecil.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                momo4.seekTo(0);
                momo4.start();
            }
        });
        billetes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                momo5.seekTo(0);
                momo5.start();
            }
        });
        tonto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                momo6.seekTo(0);
                momo6.start();
            }
        });

        return vista;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("fragmento01", "onCreate");

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.i("fragmento01", "onAttach");
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i("fragmento01", "onActivityCreated");
    }

    @Override
    public void onViewStateRestored(Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        Log.i("fragmento01", "onViewStateRestored");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.i("fragmento01", "onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.i("fragmento01", "onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.i("fragmento01", "onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.i("fragmento01", "onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.i("fragmento01", "onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i("fragmento01", "Destroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.i("fragmento01", "onDetach");
    }

}

【问题讨论】:

  • 使用界面..
  • 你可以试试广播接收器。
  • 要么使用接口,要么将事件从片段发送到活动,然后在片段中播放您的媒体播放器。
  • 什么是广播接收器?如何使用接口,请留下来回答

标签: android android-studio android-fragments media-player android-button


【解决方案1】:

您可以在启动媒体播放器的活动中创建一个公共方法,并像这样从您的片段中调用此方法,

((MainActivity)getActivity()).playMediaPlayer();

【讨论】:

  • 我想在按下按钮时调用该方法,我该怎么做?
  • @MauricioChaila 在你的 onClick 中使用这个答案
  • OnClickListener 添加到您的按钮,并在侦听器的onClick 方法中写入此行。如果您想知道如何执行此操作,请查看此答案。 stackoverflow.com/a/52364335/8663757
  • ((MainActivity)getActivity()).playMediaPlayer();我想在按下按钮时调用此方法,但我不能,我该怎么办?
【解决方案2】:

在 Main Activity 中创建一个方法

    public void playSong(String runninsong) {          
           if(player.isplaying()){
             player.stop();
            player.release();}
           int resID=getResources().getIdentifier(runningsong, "raw", 
             getPackageName());
               player.prepare();
       MediaPlayer mediaPlayer=MediaPlayer.create(this,resID);
                    mediaPlayer.start();
}  

在点击按钮的片段中

首先创建一个mainactivity的对象

MainActivity mainActivity




 oferton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {     
mainActivity = new MainActivity();                          
                mainActivity.playSong("oferton"); //You need to pass ID of the audio file
            }
        });

【讨论】:

  • playSong 方法接受 int 并且你从片段中传递一个字符串值。
  • 他们不会离开我去创造一个静态的空白
  • 您可以不使用静态方法,但每次都必须创建一个新的 mainactivity 对象
  • @MauricioChaila 我已经编辑了我的答案,试试看,告诉我会发生什么
  • @KhanStan99 感谢您发现错误我已经编辑了我的答案
【解决方案3】:

我的主要活动公共功能:

public void showToastMessage(String message) {
    Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}

这就是我在片段中的使用方式:

assert (getActivity()) != null;
((SXBaseDrawerActivity) getActivity()).showToastMessage(string);

在您的情况下,您可以使用 OnClick 按钮:

Button btn = findViewById(R.id.yout_btn);
btn.OnClickViewCompensation((v) -> {
    assert (getActivity()) != null;
((SXBaseDrawerActivity) getActivity()).showToastMessage(string);
});

注意:我以toast方法为例,你可以使用自己的函数。

【讨论】:

  • 感谢您的回答,但我不明白如何从片段 onClick 在 MainActivity 中启动 MediaPlayer
  • @MauricioChaila 您可以查看 Kevin 对 MediaPlayer 方法的回答以及如何启动它。
猜你喜欢
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多