1

我正在开发一个应用程序,在纵向和横向上有两种不同的布局。

每个布局包含两个片段。一个片段包含一个视频视图,它播放来自互联网的视频。当方向改变时,视频会重新开始。

我想在不重新启动的情况下播放视频。

这是我的代码:

**This is my main activity.**
------------------------    


public class MainActivity extends Activity {
            VIdeoFragment vfr = null;
            ImageFragment ifr = null;

            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main_activity);
            vfr = new VIdeoFragment();
            ifr = new ImageFragment();
           FragmentTransaction ft1 = getFragmentManager().beginTransaction();
           FragmentTransaction ft2 = getFragmentManager().beginTransaction();
           ft1.add(R.id.upper_view, vfr, "Vfr");
           ft2.add(R.id.down_view, ifr, "IFR");

            ft1.commit();
            ft2.commit();
            }
            }

    **--------------------------------
    VIdeoFragment** 



public class VIdeoFragment extends Fragment {
            VideoView vv,oldVV;
            View view=null;
 public static String movieUri =  "http://www.prep-zone.com/androidVideo/College Admission from Prep Zone (HD).mp4";
            @Override
            public void onActivityCreated(Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                Uri video = Uri.parse(movieUri); 
                vv.setVideoURI(video);
                vv.start();
                    }
                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container,
                        Bundle savedInstanceState) {
            view = inflater.inflate(R.layout.video, container, false);

                    vv = (VideoView) view.findViewById(R.id.videoView1);
                    return view; 
                }
            }
    ---------------------------------------------
    ImageFragment 



public class ImageFragment extends Fragment {

                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container,
                        Bundle savedInstanceState) {
                    return  inflater.inflate(R.layout.image, container,false);  
                }
}
    -------------------------------------------


<?xml version="1.0" encoding="utf-8"?>
            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <ImageView
                    android:id="@+id/imageView1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:src="@drawable/ic_action_search" />

            </LinearLayout>

    ------------------------------


<?xml version="1.0" encoding="utf-8"?>
            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <VideoView
                    android:id="@+id/videoView1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical" />

            </LinearLayout>
                -------------------------------------
                portrait main xml
                ----------------



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/LinearLayout1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <LinearLayout
                    android:id="@+id/upper_view"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1" >
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/down_view"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1" >
                </LinearLayout>

            </LinearLayout>

                ------------------------------------
                landscape xml
                ----------------


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/LinearLayout1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal" >

                <LinearLayout
                    android:id="@+id/upper_view"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1">
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/down_view"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1">
                </LinearLayout>

            </LinearLayout>
--------------------------------------------------------


    <uses-permission android:name="android.permission.INTERNET"/>

        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/title_activity_main" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

        ================================================
        please help.Thank you.
4

2 回答 2

0

在 MainActivity 的清单中,将配置更改用于方向。

android:configChanges="orientation"

然后在 Main Activity 的代码中覆盖配置更改,如果您需要处理方向更改。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
}

这将避免活动重新启动,从而避免再次播放视频。

于 2012-09-19T09:53:01.733 回答
0

回复那些仍然来此帖子寻求解决方案的人:-(对于 API 级别 13 及更高版本)

在 MainActivity 的 manifest.xml 文件中,在标记中添加以下内容

android:configChanges="orientation|screenSize"

android:configChanges - 列出 Activity 将自行处理的配置更改。当运行时发生配置更改时,活动保持运行并调用其 onConfigurationChanged() 方法,我们可以覆盖该方法以执行特定操作。

另一种方法是保存 Fragment 的状态。

在代码中(根据问题陈述的 VideoFragment 类)

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Code to fetch Fragment saved arguments
        setRetainInstance(true);
    }

默认情况下,片段的retainInstance 属性为false。因此,它不会被保留,它会随着承载它的活动一起在旋转时被销毁和重新创建。调用 setRetainInstance(true) 保留片段。当一个片段被保留时,该片段不会随活动一起被销毁。相反,它会被保存并完整地传递给新的活动。

当您保留一个片段时,您可以依靠它的所有实例变量来保持相同的值。当你伸手去拿它们时,它们就在那里。

有关详细信息,请参阅在配置更改期间保留片段

于 2014-09-03T05:18:42.077 回答