Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Viewpager未获取最后一项_Android_Android Layout_Arraylist_Android Viewpager_Android Pageradapter - Fatal编程技术网

Android Viewpager未获取最后一项

Android Viewpager未获取最后一项,android,android-layout,arraylist,android-viewpager,android-pageradapter,Android,Android Layout,Arraylist,Android Viewpager,Android Pageradapter,我在我的应用程序中使用了两个Viewpager 1) 第一个Viewpager仅显示图像 2) 我在显示价格 现在的问题是,我有4个图像显示在我的viewpager1中,在第二个页面中,我有根据所选产品的价格。第一次它并没有显示任何东西,但当我滚动图像并转到下一次时,它显示的是价格 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override publ

我在我的应用程序中使用了两个
Viewpager

1) 第一个
Viewpager
仅显示图像

2) 我在显示价格

现在的问题是,我有4个图像显示在我的viewpager1中,在第二个页面中,我有根据所选产品的价格。第一次它并没有显示任何东西,但当我滚动图像并转到下一次时,它显示的是价格

 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                Picasso.with(ProductLandingActivity.this)                            .load(categorylist.get(position).getProductLanding_packLink())
                        .error(R.drawable.nopreview )
                        .placeholder(R.drawable.progress_animation)
                        .into(selectedImage);

                System.out.println("Selected is"+position);
              selectedname.setText(categorylist.get(position).getProductLanding_packDesc());

                for (int i = 0; i < categorylist.get(position).getItems().size(); i++) {
                    System.out.println("ProductPack_ID : " + categorylist.get(position).getItems().get(i).getPackSize_sellingPrice());


                }

                temp = categorylist.get(position).getItems();

              packadapter = new MyPacksPagerAdapter(ProductLandingActivity.this,categorylist);
                pagerpacks.setAdapter(packadapter);

            }

            @Override
            public void onPageSelected(int position) {


            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }


        });
pager.addOnPageChangeListener(新的ViewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
Picasso.with(ProductLandingActivity.this).load(categorylist.get(position.getProductLanding_packLink())
.错误(R.drawable.nopreview)
.占位符(R.drawable.progress\u动画)
。输入(选择图像);
系统输出打印项次(“所选为”+位置);
selectedname.setText(categorylist.get(position.getProductLanding_packDesc());
对于(int i=0;i
适配器

private class MyPacksPagerAdapter extends PagerAdapter {

        Context context;
        ArrayList<PackListModel> packsizedata ;

        public MyPacksPagerAdapter(Context context,ArrayList<PackListModel> packsizedata) {
            this.context = context;
            this.packsizedata = packsizedata;

        }

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

            final OneActor oneActor;

            View view;
            LayoutInflater infl = ((Activity)context).getLayoutInflater();
            view = infl.inflate(R.layout.list_item_pagerpacktitles, container,false);
            oneActor = new OneActor();
           // oneActor.avatar = (ImageView) view.findViewById(R.id.image);
            oneActor.name = (TextView) view.findViewById(R.id.product_landing_packsname);
            oneActor.cmtCount = (TextView) view.findViewById(R.id.product_landing_packsprice);
            view.setTag(oneActor);


          oneActor.name.setText(temp.get(position).getPackSize_packSize());
            oneActor.cmtCount.setText(temp.get(position).getPackSize_sellingPrice());

            ((ViewGroup) container).addView(view);
            return view;
        }

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

        @Override
        public int getCount() {
            return packsizedata.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return (view == object);
        }
        class OneActor{
           // ImageView avatar;
            TextView name,cmtCount;
        }
    }
私有类MyPackPageRadapter扩展了PagerAdapter{
语境;
ArrayList packsizedata;
公共MyPackPageRadapter(上下文上下文,ArrayList packsizedata){
this.context=上下文;
this.packsizedata=packsizedata;
}
@凌驾
公共对象实例化项(视图组容器,int位置){
最后一名演员一名演员;
视图;
LayoutInflater infl=((活动)上下文)。getLayoutInflater();
视图=输入充气(R.layout.list\u item\u pagerpacktitles,container,false);
oneActor=新的oneActor();
//oneActor.avatar=(ImageView)view.findviewbyd(R.id.image);
oneActor.name=(TextView)view.findViewById(R.id.product\u landing\u packsname);
oneActor.cmtCount=(TextView)view.findViewById(R.id.product\u landing\u packsprice);
view.setTag(oneActor);
oneActor.name.setText(temp.get(position.getPackSize_packSize());
oneActor.cmtCount.setText(temp.get(position.getPackSize_sellingPrice());
((视图组)容器)。添加视图(视图);
返回视图;
}
@凌驾
公共项(视图组容器、int位置、对象){
container.removeView((视图)对象);
}
@凌驾
public int getCount(){
返回packsizedata.size();
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
返回(视图==对象);
}
第一类演员{
//图像视图化身;
TextView名称,cmtCount;
}
}
defaulat当我运行应用程序时,它会这样显示,在第二页中,它不会显示产品价格

但当我滚动图像时,它会显示价格

我的预期输出是

这是我的json响应


您应该在
onPageSelected
方法中实现操作代码,因为在
ViewPager
的页面更改后,将调用
onPageSelected

首先,正如@NotobharatKumar所述,您在父适配器的错误事件中加载了第二个适配器,ie在
onPageScrolled
方法中。第二,每次在特定事件上设置一个新适配器,这似乎没有用。最后,您要在事件中设置数据,(我不确定为什么要这样做,但是)我更喜欢在单独的适配器中设置数据,并让事件侦听器侦听特定的行为

对我来说,似乎您有两个独立的适配器,但是一个数据列表由这两个适配器共享。假设这样,您必须在开始时分别使用它们的数据设置它们,并且在顶部适配器的事件
onPageSelected
上,您只需自动滚动第二个。如果它们在列表中的位置相同,
onPageSelected
应该能正确地完成工作


因此,这些修改应该可以解决您的问题:

当你设置图像和文本时,你在
onScrollChanged
中的代码对我来说真的很奇怪。我将使用第一个适配器,在那里我将为第一个
ViewPager
设置如下两个数据:

@Override
public void onCreate(Bundle savedInstansteState) {
    ...
    // set a simple adapter for the first ViewPager
    FirstPagerAdapter imageadapter = 
             new FirstPagerAdapter(ProductLandingActivity.this, categorylist);
    pagerimages.setAdapter(imageadapter);
    ...
}
然后,像往常一样,在FirstPagerAdapter中设置数据:

@Override
public View getView(int position, View view, ViewGroup container) {
    ...
    // set the content
    Picasso.with(ProductLandingActivity.this)                            
        .load(categorylist.get(position).getProductLanding_packLink())
        .error(R.drawable.nopreview )
        .placeholder(R.drawable.progress_animation)
        .into(selectedImage);

    selectedname.setText(
            categorylist.get(position).getProductLanding_packDesc());
    ...
}
然后,在触发事件时无需(重新)加载图像或文本,因为它们将由适配器保存

您只在第二个适配器中使用
getPackSize\u packSize()
getPackSize\u sellingPrice()
,因此您应该创建一个单独的列表,仅填充这些数据,但不包括刷卡事件。首先初始化第二个列表和适配器:

// get the Items to fill the pack items list (like you did for `temp`)
ArrayList<Items> packItems = new ArrayList<>();
for (int i = 0; i < categorylist.size(); i++) {
    packItems.add(categorylist.get(position).getItems());
}

// fill the first adapter with your list of products (ie categorylist)
...
pagerimages.setAdapter(imageadapter);
...
// fill the second adapter with the pack items list
packadapter = new MyPacksPagerAdapter(ProductLandingActivity.this, packItems);
pagerpacks.setAdapter(packadapter);
最后,使用第一个事件的
onPageSelected
来控制底部的
ViewPager

pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, 
                            int positionOffsetPixels) { }

    @Override
    public void onPageSelected(int position) {
        // set the second current page regarding the position of the first
        pagerpacks.setCurrentItem(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) { }
});

希望这会有帮助。

在选择的
onPageSelected
中添加您的逻辑。我尝试过这种方法。现在当我滚动价目表时,它崩溃无效索引发布您的崩溃日志和
MyPackPageRadapter的代码。
我在选择的onPageSelected中添加了我的代码。。现在它以1开始索引。@Pr38y您可以告诉我总是以0开始。一定有什么问题。你会唱歌吗
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, 
                            int positionOffsetPixels) { }

    @Override
    public void onPageSelected(int position) {
        // set the second current page regarding the position of the first
        pagerpacks.setCurrentItem(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) { }
});