我正在开发一个应用程序,在纵向和横向上有两种不同的布局。
每个布局包含两个片段。一个片段包含从互联网播放视频的视频视图。更改方向时,视频将重新启动。
我想在不重新启动的情况下播放视频。
这是我的代码:
**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.
答案 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)保留片段。保留片段时,片段不会被活动破坏。相反,它会被保留并完整地传递给新活动。
保留片段时,可以依靠其所有实例变量来保持相同的值。当你找到他们时,他们就在那里。