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();
}
}