当我想从Fragment转到Activity时,我遇到了问题。这是我的代码:
片段:
public class details extends Fragment {
private Button btn_video;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.details, container, false);
btn_video = (Button) rootView.findViewById(R.id.btn_video);
btn_video.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), video.class);
startActivity(intent);
}
});
return rootView;
}
}
活动:(我已更改此文件,您可以在下面看到)
public class video extends Activity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.video);
final VideoView video = (VideoView) findViewById(R.id.video);
MediaController mediaController = new MediaController(this);
video.setMediaController(mediaController);
video.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.prueba));
video.start();
}
}
我来看视频显示和重现,但应用程序已关闭,通过控制台我看到此活动在线程内。我认为片段不会停止,我认为这是重新加载。这是例外:
11-12 20:15:46.741 18249-18249/xxx.xxx.xxx.xxx/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: xxx.xxx.xxx.xxx, PID: 18249
java.lang.RuntimeException: Parcel: unable to marshal value xxx.xxx.xxx.xxx.articulo@4269f860
at android.os.Parcel.writeValue(Parcel.java:1266)
at android.os.Parcel.writeList(Parcel.java:653)
at android.os.Parcel.writeValue(Parcel.java:1226)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:134)
at android.os.Parcel.writeTypedArray(Parcel.java:1133)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:378)
at android.os.Parcel.writeParcelable(Parcel.java:1285)
at android.os.Parcel.writeValue(Parcel.java:1204)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2755)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3414)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
有人帮我解决了这个问题。或者告诉我哪里有错误。
提前致谢。
修改
我编辑此评论,如果您发现它有用。好的,我发现了一个临时修复。就是这样:
我已将Activity更改为Fragment。
公共类视频扩展片段{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.video, container, false);
constants.setPrincipal(false);
// When I rotate the screen, I've a problem.
//getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ActionBar actionBar = (ActionBar) getActivity().getActionBar();
actionBar.hide();
VideoView video = (VideoView) rootView.findViewById(R.id.video);
MediaController mediaController = new MediaController(getActivity());
video.setMediaController(mediaController);
video.setVideoURI(Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.prueba));
video.start();
return rootView;
}
}
我说这是临时修复,因为当我旋转屏幕时我想全屏播放视频。主要活动成为景观,这重新加载。所以,我只能以肖像方式显示视频。我正在尝试搜索新修复程序。
如果有人可以帮助我。感谢。
更新
我发现了错误,它是其他的东西,活动细节是你从另一个片段发来的捆绑,这个捆绑是一个arraylist。
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = new details();
Bundle bundle = new Bundle();
ArrayList<articulo> seleccionado= new ArrayList<articulo>();
seleccionado.add(((articulo) articulo));
bundle.putSerializable("variables", seleccionado);
fragment.setArguments(bundle);
fragmentTransaction.addToBackStack(null).hide(hide)
.replace(R.id.container, fragment).commit();
为了解决这个问题,我使用了公共静态变量来存储产品数据。
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = new details();
public static ArrayList<articulo> articuloDetails = new ArrayList<articulo>();
articuloDetails.add(((articulo) articulo));
fragmentTransaction.addToBackStack(null).hide(hide)
.replace(R.id.container, fragment).commit();
答案 0 :(得分:0)
你应该使用
getActivity().startActivity(intent);
而不是
startActivity(intent);
如果我错了,请纠正我,但片段总是在活动中。这就是为什么它应该首先调用Activity才能启动另一个Activity。这可能是因为活动可以容纳多个碎片,但碎片无法容纳任何活动。