
안녕하세요.
이런 식으로 웹뷰를 2개 배치하는 앱을 만들려고 하는 초보자입니다...
프래그먼트를 사용하면 화면이 회전되어 레이아웃이 바뀌어도
객체를 재생성하지 않는다고 해서 사용해봤는데
레이아웃은 위와 같이 정상적으로 바뀌지만
덩달아 웹뷰가 재생성되어 웹 페이지를 다시 불러옵니다.
Fragment의 setRetainInstance 메소드를 사용하면 된다고 들었는데
제가 잘못 사용해서 그런지... 잘 모르겠습니다......
메니페스트 configChanges에 orientation, screensize, keyboardHidden 을 적용해보아도 안되고...
가능하면 화면 회전시 기존에 보여주던 웹 페이지를 다시 로딩하지 않고 보여주고 싶은데
아무리 고민해봐도 잘 되지 않아서 한번 질문드립니다.
어떤 방법을 사용해야 레이아웃이 바뀌어도 웹뷰를 유지할 수 있을지
혹시 제가 코딩한 부분에 잘못된 부분이 있는지 알고 싶습니다...
도움 부탁드립니다. (_ _)
# layout-land/activity_main.xml & layout-port/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" <!-- layout-port/activitity_main.xml은 vertical -->
tools:context=".MainActivity" >
<fragment
android:name="com.example.simplefrag.Fragment1"
android:id="@+id/fragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:name="com.example.simplefrag.Fragment2"
android:id="@+id/fragment2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
# MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
# layout/fragment1.xml & layout/fragment2.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Fragment1" >
<WebView
android:id="@+id/webView1" <!-- layout/fragment2.xml은 webView2 -->
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
# Fragment1.java & Fragment2.java
public class Fragment1 extends Fragment {
View v;
WebView webView1; // Fragment2.java 에서는 webView2
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment1, container, false);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
webView1 = (WebView)v.findViewById(R.id.webView1); // Fragment2.java 에서는 webView2
/* 웹뷰 관련 셋팅 코드 생략... */
webView1.loadUrl("http://m.daum.net"); // Fragment2.java 에서는 webView2
} }