gpt4 book ai didi

android - PagerAdapter 类 instantiateItem 在 onCreate 中被自动调用两次

转载 作者:搜寻专家 更新时间:2023-11-01 08:05:09 27 4
gpt4 key购买 nike

我是 viewpager 的新手,我想使用 viewpager 创建 View ,这里所有的东西都是动态的,所以我按照这种方式进行,我的问题是 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();
}

}

最佳答案

当 View 页面创建下一个 View 并存储它以便从当前 View 快速切换到下一个 View 时调用它两次是行为,基本上它为当前 View 创建其左右元素以便您可以向任何方向滚动页面,在起始页,因为没有左页,这就是为什么它只被调用两次。您还可以根据情况更改要创建和保留的 View 数量,但总的来说,我认为最小(不确定但有时实际遇到)是 3

关于android - PagerAdapter 类 instantiateItem 在 onCreate 中被自动调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15332705/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com