IT_Programming/Android_Java

[펌] ViewPager에 적용되는 Fragment View 재사용하기 (ViewHolder 적용)

JJun ™ 2012. 10. 5. 22:11



출처: http://oic.tstore.co.kr/front/community/mentoring/viewMentoring.action?seq=172




[요약]

Fragment의 onCreateView에서 ViewHolder를 사용해서 성능을 향상시키자.




[내용]

ViewPager와 함께 사용하는 Fragment는 화면에서 일정 범위를 벗어나면 
View의 내용이 삭제된다. 그랬다가 다시 일정 범위내에 들어와서 보여질 
준비를 할때 onCreateView() 메소드가 호출되면서 View 인스턴스를 준비하는 형태이다.

이렇게 반복적으로 onCreateView에서 View 인스턴스를 새로이 확보하는 방법보다는
이전에 확보된 View를 재 사용할 수 있도록 ViewHolder를 사용하는 것이다.
이것은 List에서 Adapter getView에서 사용하는 ViewHolder와 같은 개념이다.




[방법] - 아래 내용은 Fragment에서 코딩

1. ViewHolder 클래스 및 Fragment 레이아웃을 담아둘 멤버 변수 준비한다. 


 private class ViewHolder{
      TextView tvTitle;
 }

 private View mFragmentView = null;
 private ViewHolder mHolder = null;


2. Fragment의 onCreateView() 메소드에 적용하기



@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{

   if (mFragmentView == null){
       mFragmentView  = inflater.inflate(R.layout.main_fragment, container, false);
       mHolder = new ViewHolder();
       mHolder.tvTitle = mFragmentView.findViewById(R.id.TITLE}
       mFragmentView.setTag(mHolder);
   } else {
       ViewParent vParent = (ViewParent) mFragmentView.getParent();
       if(vParent != container) {
           ((ViewGroup) vParent).removeView(mFragmentView);
       }
       mHolder = (ViewHolder) mFragmentView.getTag();
   }
  
    mHolder.tvTitle.setText("타이틀");
   return mFragmentView;
} 


Fragment의 많은 위젯을 불러와 인스턴스화 하는 시간을 단축하고 메모리도 절약해서 사용할 수 있는 장점이 있습니다.