티스토리 뷰

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를 화면에 출력해줍니다.


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

감사합니다.


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

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

댓글
  • 프로필사진 shy getChildFragmentManager 는 엑티비티에서 호출이 불가능 하다는데요?? 프레그먼트 내에서 호출이 가능한데요?? 2018.09.28 18:04 신고
댓글쓰기 폼
공지사항
Total
391,495
Today
55
Yesterday
296
«   2018/10   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함