2013-05-02 125 views
-1

我目前正在測試Android中的viewpager。創建了一個自定義適配器,但當我嘗試滑動viewpager時出現此錯誤。任何人都可以幫助我嗎?ViewPager removeView()第一個孩子的父母

public class ViewPagerAdapter extends PagerAdapter { 
    Context context; 
    int[] flag; 
    LayoutInflater inflater; 

    public ViewPagerAdapter(Context context, int[] flag) { 
     this.context = context; 
     this.flag = flag; 
    } 

    @Override 
    public int getCount() { 
     return flag.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((ImageView) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     ImageView imgflag; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View itemView = inflater.inflate(R.layout.viewpager_item, container, false); 
     //ImageView imageView = new ImageView(context); 
     //imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     //imageView.findViewById(R.id.flag); 
     imgflag = (ImageView) itemView.findViewById(R.id.flag); 
     imgflag.setImageResource(flag[position]); 
     ((ViewPager) container).addView(imgflag); 

     return imgflag; 
    } 


    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     ((ViewPager) container).removeView((ImageView) object); 

    } 

的logcat:

05-02 10:35:26.926: E/AndroidRuntime(4939): FATAL EXCEPTION: main 
05-02 10:35:26.926: E/AndroidRuntime(4939): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

編輯建議的理查德:

public class ViewPagerAdapter extends PagerAdapter { 
Context context; 
int[] flag; 
LayoutInflater inflater; 
ImageView imgflag; 
View itemView; 

public ViewPagerAdapter(Context context, int[] flag) { 
    this.context = context; 
    this.flag = flag; 
} 

@Override 
public int getCount() { 
    return flag.length; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((ImageView) object); 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 


    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.viewpager_item, container, false); 
    //ImageView imageView = new ImageView(context); 
    //imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    //imageView.findViewById(R.id.flag); 
    imgflag = (ImageView) itemView.findViewById(R.id.flag); 
    imgflag.setImageResource(flag[position]); 

    ((ViewPager) container).addView(itemView); 

    //return imgflag; 
    return itemView; 
} 


@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    //((ViewPager) container).removeView((ImageView) object); 
    ((ViewPager) container).removeView(itemView); 
    //((ViewGroup)imgflag.getParent()).removeView(imgflag); 

} 

}

的logcat:

05-02 10:55:42.786: E/AndroidRuntime(7763): FATAL EXCEPTION: main 
05-02 10:55:42.786: E/AndroidRuntime(7763): java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.ImageView 

回答

1

這是因爲你正在返回imgFlag而不是itemView。您還需要將itemView添加到分頁器中,而不是添加imgFlag。

inflater將imgFlag的父項設置爲itemView,然後嘗試將imgFlag添加到viewpager,而無需先從itemView中將其移除。

編輯:這很可能是因爲:

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((ImageView) object); 
} 

公共類ViewPagerAdapter擴展PagerAdapter { 上下文的背景下; int [] flag; LayoutInflater inflater;

public ViewPagerAdapter(Context context, int[] flag) { 
    this.context = context; 
    this.flag = flag; 
} 

@Override 
public int getCount() { 
    return flag.length; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((RelativeLayout) object); 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    ImageView imgflag; 

    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View itemView = inflater.inflate(R.layout.viewpager_item, container, false); 
    //ImageView imageView = new ImageView(context); 
    //imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    //imageView.findViewById(R.id.flag); 
    imgflag = (ImageView) itemView.findViewById(R.id.flag); 
    imgflag.setImageResource(flag[position]); 
    ((ViewPager) container).addView(imgflag); 

    return imgflag; 
} 


@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    ((ViewPager) container).removeView((RelativeLayout) object); 

} 
+0

請檢查我的編輯。我仍然無法理解理查德。 :( – 2013-05-02 02:56:46

+0

您仍然將imgFlag添加到viewPager,而不是添加itemView。 – richardwiden 2013-05-02 03:28:42

+0

您能告訴我現在我該做什麼嗎?謝謝 – 2013-05-02 03:46:27

相關問題