是一个显示视频的片段。
这个片段可以
1)点击按钮
打开一个新活动2)通过调用
替换另一个片段fragmentManager.beginTransaction().replace(R.id.container, f).addToBackStack(tag).commit();
对于1)的情况,我想打电话给player.stopPlayBack()
以停止视频播放
对于2)的情况,我想致电player.stopPlayBack()
和player.release()
来终止播放器
问题是,我应该为案例1)和2)调用什么事件?我尝试使用onPause或onStop,但它们似乎都没有被解雇。
如何解决?
非常感谢你的帮助。
更新:
视频片段代码
public class Video extends Fragment implements MediaPlayer.OnPreparedListener {
@Bind(R.id.player) EMVideoView player;
@Bind(R.id.full_screen) ImageView full_screen;
Context ctx;
MyApp app;
String video_url;
int intent_code = 5545;
int pos;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.video, container, false);
ButterKnife.bind(this, view);
Bundle bundle = this.getArguments();
video_url = bundle.getString("video_url");
String id = bundle.getString("id");
app = (MyApp) getActivity().getApplicationContext();
app.record_view(id);
Main m = (Main)getActivity();
m.toggle_upload_btn(false);
pos = 0;
full_screen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), VideoFullScreen.class);
i.putExtra("video_url", video_url);
i.putExtra("time", (int) player.getCurrentPosition());
startActivityForResult(i, intent_code); //random intent number
}
});
return view;
}
@Override
public void onPrepared(MediaPlayer mp) {
player.seekTo(pos);
player.start();
}
@Override
public void onResume() {
super.onResume();
player.setOnPreparedListener(this);
player.setVideoURI(Uri.parse(video_url));
}
@Override
public void onStop() {
super.onStop();
player.stopPlayback();
//player.release();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == intent_code) {
if(resultCode == Activity.RESULT_OK){
pos = data.getIntExtra("time", 0);
}
}
}
答案 0 :(得分:11)
当片段被添加到Backstack中,然后被替换或删除时 - 它将是这样的:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.ManageYourTrip.mytguideapp.Voucher" >
<LinearLayout
android:id="@+id/voucherTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Voucher"
android:textSize="24sp"
android:textStyle="bold"/>
</LinearLayout>
<TextView
android:id="@+id/TV_Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_below="@id/voucherTitle"
android:text="Date: "
android:textSize="12sp"
android:textStyle="bold"
>
</TextView>
<TextView
android:id="@+id/TV_voucher_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_toRightOf="@id/TV_Date"
android:layout_below="@id/voucherTitle"
android:textSize="12sp">
</TextView>
<TextView
android:id="@+id/TV_supplier_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_below="@id/TV_Date"
android:text="Supplier Details:"
android:textSize="12dp"
android:textStyle="bold">
</TextView>
<TextView
android:id="@+id/TV_supplier_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/TV_supplier_title"
android:textSize="12dp">
</TextView>
<TextView
android:id="@+id/LI_TV_suppliers_Address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/TV_supplier_name"
android:textSize="12dp">
</TextView>
<TextView
android:id="@+id/TV_products_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_below="@id/LI_TV_suppliers_Address"
android:text="PRODUCTS"
android:textSize="12dp"
android:textStyle="bold"
android:layout_marginLeft="2dp">
</TextView>
<TextView
android:id="@+id/TV_products_quantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_below="@id/LI_TV_suppliers_Address"
android:text="Qty."
android:textSize="12dp"
android:textStyle="bold"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true">
</TextView>
<ListView
android:id="@+id/ProductsList"
android:layout_above="@+id/bottom_layout"
android:layout_below="@+id/TV_products_title"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<LinearLayout
android:id="@+id/bottom_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/voucher_number"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="VOUCHER #"
android:textSize="12dp"
android:textStyle="bold">
</TextView>
<TextView
android:id="@+id/TV_voucher_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="123"
android:textSize="12dp">
</TextView>
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_marginTop="20dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_below="@+id/ProductsList"
android:text="REF #"
android:textSize="12dp"
android:textStyle="bold">
</TextView>
</RelativeLayout>
如果删除片段,或者在没有添加到后栈的情况下进行替换,则会发生以下情况:
onPause() -> onSaveInstanceState() -> onStop() -> onDestroyView()
当一项活动开始另一项活动(source)时:
生命周期回调的顺序已明确定义,尤其是在何时 这两个活动是在同一个过程中,一个是开始的 其他。这是活动A时发生的操作顺序 开始活动B:
活动A的onPause()方法执行。活动B的onCreate(), onStart()和onResume()方法按顺序执行。 (活动B现在 有用户关注。)然后,如果屏幕上不再显示活动A, 它的onStop()方法执行。
因为您需要调用存在片段的活动,才能开始新的活动。