Как получить текущие поля страницы из объекта PagerAdapter? - PullRequest
0 голосов
/ 23 мая 2018

Я занимаюсь разработкой приложения, которое использует ViewPager и PagerAdapter.Это работает нормально, 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 и идентификатор текущей страницы видимым.Когда я вызываю mAdapter.getBitmap();, этот метод возвращает растровое изображение следующей закадровой страницы.Как я могу получить растровое изображение видимой страницы ViewPager?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

В классе ViewPager есть метод getCurrrentItem().Вы можете получить индекс текущей страницы с помощью getCurrentItem().

Использовать как:

viewPager.getCurrentItem()

И вы можете установить как:

viewPager.setCurrentItem(setCurrentItem);
0 голосов
/ 23 мая 2018

Для того, что вы пытаетесь добиться, используйте ViewPager вместо PagerAdapter, я прошел через аналогичную проблему и использовал

onPageSelected (int currentPage)

метод viewpagerчтобы отобразить текущий элемент.

...