我是viewpager的新手,我想使用viewpager创建视图,这里所有的东西都是动态的,所以我遵循这种方式,我的问题是instantiateItem()在创建时被调用了两次。
创建
{
pager = (ViewPager) findViewById(R.id.panelPager);
adapter = new MyPagerAdapter();
pager.setAdapter(adapter);
}
public class MyPagerAdapter extends PagerAdapter {
@Override
public Object instantiateItem(View collection,int position) {
Log.d("Pos",""+position);
//PagerView = new View(collection.getContext());
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
PagerView = inflater.inflate(R.layout.newmainviewpager, null, false);
lvMenu=(ListView)PagerView.findViewById(R.id.lvMenuItem);
imgMainItem=(ImageView)PagerView.findViewById(R.id.imgDisplay);
addMenuItemAdapter.clear();
addMenuItemAdapter.notifyDataSetChanged();
addMenuItemAdapter.notifyDataSetInvalidated();
String str[][] = datasource.GetSubMenuDetailsFromMenuId(MenuIdlst
.get(position).trim());
Log.d("Str", "" + str.length);
SubMnuIdlst.clear();
SubMnuNamelst.clear();
ArabicSubMnulst.clear();
TypeIdlst.clear();
TypeNamelst.clear();
for (int i = 0; i < str.length; i++) {
SubMnuIdlst.add(""+str[i][0]);
SubMnuNamelst.add(""+str[i][2]);
ArabicSubMnulst.add(""+str[i][3]);
Log.d("SubMenuId",""+str[i][0]);
Log.d("SubMenuName",""+str[i][2]);
Log.d("SubMenuNameArabicMenu",""+str[i][3]);
}
String [][]TypeDetails=datasource.GetTypeDetailsFromMenuId(MenuIdlst.get(position));
for (int i = 0; i < TypeDetails.length; i++) {
TypeIdlst.add(TypeDetails[i][0]);
TypeNamelst.add(TypeDetails[i][3]);
Log.d("TypeId",""+TypeDetails[i][0]);
Log.d("TypeName",""+TypeDetails[i][3]);
}
for(int i=0;i<SubMnuIdlst.size();i++)
{
//Pricelst.clear();
for(int j=0;j<TypeIdlst.size();j++)
{
String Price=datasource.getPriceFromSubMenuIdAndTypeId(TypeIdlst.get(j),SubMnuIdlst.get(i));
//Pricelst.add(Price);
Log.d("Adaper",MenuIdlst.get(i)+","+SubMnuIdlst.get(i)+","+SubMnuNamelst.get(i)+","+
TypeIdlst.get(j)+","+TypeNamelst.get(j)+","+Price);
addMenuItemAdapter.add(MenuIdlst.get(i)+","+SubMnuIdlst.get(i)+","+SubMnuNamelst.get(i)+","+
TypeIdlst.get(j)+","+TypeNamelst.get(j)+","+Price);
}
}
byte[] photo =datasource.getImagePathFromSubMenuId(SubMnuIdlst.get(position));
ByteArrayInputStream imageStream = new ByteArrayInputStream(photo);
Bitmap theImage= BitmapFactory.decodeStream(imageStream);
Bitmap bitmapScaled = Bitmap.createScaledBitmap(theImage, 100,80, true);
Drawable drawable = new BitmapDrawable(bitmapScaled);
imgMainItem.setBackgroundDrawable(drawable);
lvMenu.setAdapter(addMenuItemAdapter);
((ViewPager) collection).addView(PagerView, 0);
return PagerView;
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
((ViewPager) view).removeView((View) view);
}
/**
* Determines whether a page View is associated with a specific key object
* as returned by instantiateItem(ViewGroup, int). This method is required
* for a PagerAdapter to function properly.
* @param view Page View to check for association with object
* @param object Object to check for association with view
* @return
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
/**
* Called when the a change in the shown pages has been completed. At this
* point you must ensure that all of the pages have actually been added or
* removed from the container as appropriate.
* @param arg0 The containing View which is displaying this adapter's
* page views.
*/
@Override
public void finishUpdate(ViewGroup arg0) {}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(ViewGroup arg0) {}
@Override
public int getCount() {
// TODO Auto-generated method stub
return MenuIdlst.size();
}
}