2013-11-28 4 views
2

보기 플리퍼가 목록보기 항목으로 있고 항목을 런타임에보기 플리퍼에로드합니다.목록보기에서보기 플리퍼 상태 유지

문제점 :보기가 특정 행으로 바뀌고 목록보기를 스크롤 할 때 오른쪽으로 넘긴 후 특정 위치로 설정된보기가 손실됩니다.

켜기 모든 행에서 뷰 플리퍼가 0 번째 상태로 다시 초기화됩니다. 여기

내 자료 어댑터입니다 :

public class ListViewAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<TypeOneDataClass> typeOneList; 
    private LayoutInflater inflater; 
    public static ArrayList<ViewPager> myPagers = new ArrayList<ViewPager>(); 
    private ArrayList<Integer> myInnerList; 
    //public static ArrayList<ArrayList<Integer>> myList = new ArrayList<ArrayList<Integer>>(); 
    private ArrayList<FlipperPosition> myFlipList = new ArrayList<FlipperPosition>(); 

    public ListViewAdapter(Context context, 
      ArrayList<TypeOneDataClass> typeOneList) { 
     this.context = context; 
     this.typeOneList = typeOneList; 
     inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return typeOneList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return typeOneList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     // TODO Auto-generated method stub 
     return IGNORE_ITEM_VIEW_TYPE; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     FlipperPosition flipperPosition; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.list_item, null, false); 
      holder.viewFlipper = (ViewFlipper)convertView.findViewById(R.id.myFlipper); 
      for(int i=0;i<typeOneList.get(position).getDetailsList().size();i++){ 
       View v = inflater.inflate(R.layout.pager_item, null); 
       holder.viewFlipper.addView(v); 

       final TextView tv_name = (TextView)v.findViewById(R.id.tv_name); 
       final TextView tv_fathersName = (TextView)v.findViewById(R.id.tv_fathersname); 
       Button btn_right = (Button)v.findViewById(R.id.btn_right); 
       Button btn_left = (Button)v.findViewById(R.id.btn_left); 

       final ViewHolder vHolder = holder; 

       btn_left.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_left); 
         vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_right); 
         vHolder.viewFlipper.showPrevious(); 
         Toast.makeText(context, "Row"+position+" "+vHolder.viewFlipper.indexOfChild(vHolder.viewFlipper.getCurrentView()), 0).show(); 
        } 
       }); 

       btn_right.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_right); 
         vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_left); 
         vHolder.viewFlipper.showNext(); 
         int indexofFliper = vHolder.viewFlipper.indexOfChild(vHolder.viewFlipper.getCurrentView()); 
         Toast.makeText(context, "Row"+position+" "+indexofFliper, 0).show(); 
        } 
       }); 

       tv_name.setText(typeOneList.get(position).getName()); 
       tv_fathersName.setText(typeOneList.get(position).getDetailsList().get(myFlipList.get(position).getFlipTermSet()).getFathersname()); 
      } 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     return convertView; 
    } 
    class ViewHolder { 
     ViewFlipper viewFlipper; 
    } 

답변

2

나는 TypeOneDataClass이 무엇인지 모르겠지만, 같은, 여기에 추가 필드를 추가하는 게 좋을 것 : 그런 다음

int lastDisplayed; 

버튼을 변경하여 현재 상태를 저장할 수 있습니다.

btn_left.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_left); 
     vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_right); 
     vHolder.viewFlipper.showPrevious(); 
     // SAVE STATE 
     typeOneList.get(position).lastDisplayed = vHolder.viewFlipper.getDisplayedChild(); 
    } 
}); 

btn_right.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_right); 
     vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_left); 
     vHolder.viewFlipper.showNext(); 
     // SAVE STATE 
     typeOneList.get(position).lastDisplayed = vHolder.viewFlipper.getDisplayedChild(); 
    } 
}); 

마지막으로 해당 상태를 복원해야합니다. 행이 다시 보입니다.

convertView.setTag(holder); 
    // RESTORE STATE 
    holder.viewFlipper.setDisplayedChild(typeOneList.get(position).lastDisplayed); 
} else { 
    holder = (ViewHolder) convertView.getTag(); 
} 
return convertView; 
+0

감사합니다. @j__m. 나를 위해 매력처럼 일했습니다. –