如何从 PagerAdapter 对象获取当前页面字段?

Posted

技术标签:

【中文标题】如何从 PagerAdapter 对象获取当前页面字段?【英文标题】:How can I get current page fields from PagerAdapter object? 【发布时间】:2018-05-23 03:57:42 【问题描述】:

我正在开发一个使用ViewPagerPagerAdapter的应用程序。这工作正常,ViewPager 显示正确的内容,但我需要当前图像的位图在屏幕上移位。我写了两个方法getBitmap()getId()。这是代码。

    public class CursorPagerAdaptor extends PagerAdapter 
    private Cursor mCursor;
    private Context mContext;
    private Bitmap bitmap;
    int id;
    LayoutInflater layoutInflater;
    public CursorPagerAdaptor(Context context,Cursor cursor)
        mContext = context;
        mCursor = cursor;
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    @Override
    public int getCount() 
        return mCursor.getCount();
    

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

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) 
        View itemView= layoutInflater.inflate(R.layout.view_pager_items, container, false);
        final ImageView imageView = (ImageView) itemView.findViewById(R.id.image);
        final ProgressBar progressBar = (ProgressBar)itemView.findViewById(R.id.progress);
        //
        mCursor.moveToPosition(position);
        int urlIndex = mCursor.getColumnIndex(MetaDataInfo.COLUMN_PHOTOURL);
        String url = mCursor.getString(urlIndex);
        int idIndex = mCursor.getColumnIndex(MetaDataInfo._ID);
        id = mCursor.getInt(idIndex);

        container.addView(itemView);
        Glide.with(mContext)
                .asBitmap()
                .load(url).apply(new RequestOptions().dontAnimate().fitCenter())
                .into(new SimpleTarget<Bitmap>(640,480) 
                    @Override
                    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) 
                        progressBar.setVisibility(View.GONE);
                        bitmap = resource;
                        imageView.setImageBitmap(resource);
                    


                );
        ViewGroup parent = ((ViewGroup)itemView.getParent());
        if (parent!=null) parent.removeView(itemView); 
        container.addView(itemView);
        return  itemView;
    

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) 
        container.removeView((RelativeLayout)object);
        bitmap = null;
    
    public Bitmap getBitmap()
     return bitmap;
    
    public int getId()
        return id;
    

这工作正常,但我需要 Bitmap 和当前页面的 id 可见。 当我调用mAdapter.getBitmap(); 时,此方法返回下一个屏幕外页面的位图。如何获取ViewPager可见页面的Bitmap?

【问题讨论】:

请查看:***.com/questions/8538035/… 【参考方案1】:

对于您尝试使用 ViewPager 而不是 PagerAdapter 来实现的目标,我已经经历了类似的问题并使用了

onPageSelected(int currentPage)

viewpager 获取当前项目显示的方法。

【讨论】:

您是否已将 PagerAdapter 更改为 Viewpager ? 谢谢,通过努力,我明白了。 onPageSelected 完成了这项工作【参考方案2】:

ViewPager 类有getCurrrentItem() 方法。您可以使用getCurrentItem().获取当前页面索引

像这样使用:

viewPager.getCurrentItem()

您可以设置如下:

viewPager.setCurrentItem(setCurrentItem);

【讨论】:

以上是关于如何从 PagerAdapter 对象获取当前页面字段?的主要内容,如果未能解决你的问题,请参考以下文章

android viewpager如何动态添加页面?

Android PagerAdapter :: 将当前项目放入位图中

PagerAdapter 中的异步位置

关于ViewPager的适配器之——pagerAdapter加载缓存页面的机制

如何获取当前页面的url地址?

如何从 ASP.NET 页面获取当前登录的 Windows 帐户?