package com.aincc.libtest.activity.flip; import java.lang.ref.WeakReference; import java.util.List; import android.content.Context; import android.os.Parcelable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.aincc.libtest.activity.flip.internal.FlipItem; /** * * <h3><b>FlipAdapter</b></h3></br> * * 플립 어댑터 * * @author aincc@barusoft.com * @version 1.0.0 * @since 1.0.0 */ public abstract class FlipAdapter { public static final int POSITION_UNCHANGED = -1; public static final int POSITION_NONE = -2; /** * 레이아웃 뷰 */ private WeakReference<View> view; /** * 옵저버 */ private DataSetObserver observer; /** * 컨텍스트 */ protected Context context; /** * 플립리스트 데이터 */ protected List<? extends FlipItem> listdata; /** * 생성자 * * @since 1.0.0 * @param context * @param listdata */ public FlipAdapter(Context context, List<? extends FlipItem> listdata) { super(); this.context = context; this.listdata = listdata; } /** * @since 1.0.0 * @return 플립아이템 개수 */ protected int getCount() { if (null != listdata) { return listdata.size(); } return 0; } /** * 해당 위치의 플립뷰 생성 * * @since 1.0.0 * @param container * @param position * @return 생성한 플립뷰 */ public Object instantiateItem(ViewGroup container, int position) { FlipItem item = listdata.get(position); view = new WeakReference<View>(LayoutInflater.from(context).inflate(item.getLayout(), null)); container.addView(view.get(), 0); return view.get(); } /** * 해당 위치의 플립뷰 삭제 * * @since 1.0.0 * @param container * @param position * @param object */ public void destroyItem(ViewGroup container, int position, Object object) { ((FlipViewGroup) container).removeView((View) object); object = null; } /** * * @since 1.0.0 * @param view * @param obj * @return boolean */ public boolean isViewFromObject(View view, Object obj) { return view == obj; } /** * 업데이트 시작시 처리 * * @param container */ public void startUpdate(View container) { } /** * @param container * The containing View from which the page will be removed. * @param position * The page position that is now the primary. * @param object * The same object that was returned by {@link #instantiateItem(View, int)}. */ public void setPrimaryItem(View container, int position, Object object) { } /** * 업데이트 종료시 처리 * * @param container */ public void finishUpdate(View container) { } /** * 상태 저장 * * @since 1.0.0 * @return */ public Parcelable saveState() { return null; } /** * 상태 복구 * * @since 1.0.0 * @param state * @param loader */ public void restoreState(Parcelable state, ClassLoader loader) { } /** * @param object * @return */ public int getItemPosition(Object object) { return POSITION_UNCHANGED; } /** * 갱신처리 */ public void notifyDataSetChanged() { if (null != observer) { observer.onDataSetChanged(); } } /** * 옵저버 등록 * * @since 1.0.0 * @param observer */ void setDataSetObserver(DataSetObserver observer) { this.observer = observer; } /** * * <h3><b>DataSetObserver</b></h3></br> * * @author aincc@barusoft.com * @version 1.0.0 * @since 1.0.0 */ interface DataSetObserver { public void onDataSetChanged(); } }