两个布局使用片段方向更改的视频视图

时间:2012-09-19 09:43:29

标签: android android-layout

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

每个布局包含两个片段。一个片段包含从互联网播放视频的视频视图。更改方向时,视频将重新启动。

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

这是我的代码:

**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.

2 个答案:

答案 0 :(得分:0)

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

android:configChanges="orientation"

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

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

这样可以避免活动重启,并避免再次播放视频。

答案 1 :(得分:0)

回复那些仍然在这篇文章中寻求解决方案的人:-(对于API等级13及更高版本)

在MainActivity的manifest.xml文件中,在标记

中添加以下内容
android:configChanges="orientation|screenSize"

android:configChanges -lists活动将自行处理的配置更改。当运行时发生配置更改时,活动仍在运行,并且调用onConfigurationChanged()方法,我们可以覆盖它来执行特定的操作。

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

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

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

默认情况下,片段的retainInstance属性为false。因此,它不会被保留,并且会在轮换时与托管它的活动一起销毁并重新创建。调用 setRetainInstance(true)保留片段。保留片段时,片段不会被活动破坏。相反,它会被保留并完整地传递给新活动。

保留片段时,可以依靠其所有实例变量来保持相同的值。当你找到他们时,他们就在那里。

有关详细信息,请参阅Retaining Fragment during configuration change