본문 바로가기

나의 플랫폼/안드로이드

[Android] 한 FrameActivity 안에 여러개의 ViewPager를 사용할 때 주의점.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

FrameActivity 에서 ViewPager를 하나만 사용할 경우, 아래와 같은 예제를 많이 이용하실 껍니다.

package com.truiton.fragmentpageradapter;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends FragmentActivity {
static final int ITEMS = 10;
MyAdapter mAdapter;
ViewPager mPager;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
 
Button button = (Button) findViewById(R.id.first);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mPager.setCurrentItem(0);
}
});
button = (Button) findViewById(R.id.last);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mPager.setCurrentItem(ITEMS - 1);
}
});
}
 
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
 
@Override
public int getCount() {
return ITEMS;
}
 
@Override
public Fragment getItem(int position) {
switch (position) {
case 0: // Fragment # 0 - This will show image
return ImageFragment.init(position);
case 1: // Fragment # 1 - This will show image
return ImageFragment.init(position);
default:// Fragment # 2-9 - Will show list
return TruitonListFragment.init(position);
}
}
}
 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
 
}

출처 : http://www.truiton.com/2013/05/android-fragmentpageradapter-example/


FragmentPagerAdapter를 사용하기 위해서는 FragmentManager를 매개변수로 넘겨줘야 합니다.

이때 즐겨 사용하는 함수가 getSupportFragmentManager 이죠.


중요한 부분이 ViewPager를 한 Fragement에 두개를 사용한다고 해봅시다.!

(UX에 따라 있을 수 있겠죠? ㅎ)


그럼 getSupoortFragmentManager를 넘기면 ViewPager를 통해 Fragment에 onCreateView까지 호출이 되지만,

화면에 Fragment가 그려지지 않습니다.

두개중 하나만 그려지는 현상이 발생 합니다.



이부분을 해결하기 위해서 제가 여러 테스트를 진행해본 결과! (구글링 해도 찾기 어렵더라구요.ㅠㅠ)


getChildFragmentManager() 함수를 이용하세요.!!


그럼 FragmentManager가 분리하여 관리하기 때문에 ViewPager를 화면에 출력해줍니다.


이것은 상황에 따라 바뀌기 때문에 참고 하시라고 글을 올립니다.

감사합니다.


## 이블로그는 어디까지는 찾았던 부분을 잊지 않기 위해 올려놓은 것 입니다.

    내용이 부실해도 이해해 주시길 바랍니다.