在Android错误中转到Fragment中的Activity

时间:2014-11-12 19:33:27

标签: android android-intent android-activity android-fragments

当我想从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();

1 个答案:

答案 0 :(得分:0)

你应该使用

getActivity().startActivity(intent);

而不是

startActivity(intent);

如果我错了,请纠正我,但片段总是在活动中。这就是为什么它应该首先调用Activity才能启动另一个Activity。这可能是因为活动可以容纳多个碎片,但碎片无法容纳任何活动。