我有两个按钮,分别是erton,atrape,smiders,imbecil,billetes和tonto, 我想做的例子: 我想从片段Frag1中按下按钮offerton,然后启动MainActivity中的媒体播放器momo1 我知道这是错误的,但是我想知道当我从Fragment中按下按钮时如何从MainActivity启动Media Player。
这是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");
}
}
答案 0 :(得分:0)
您可以在活动中创建一个公共方法,该方法将启动媒体播放器并像这样从片段中调用该方法,
((MainActivity)getActivity()).playMediaPlayer();
答案 1 :(得分:0)
在“主要活动”中创建方法
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
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
}
});
答案 2 :(得分:0)
我的主要活动公共职能:
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);
});
注意:例如,我使用了吐司方法,您可以使用自己的功能。