Задать вопрос

Как заставить viewpager добавлять новые элементы в центр и разрешить прокручивание к последнему элементу?

Код Viewpager Adapter
package com.kuznetsov.adapters;

import java.util.ArrayList;
import java.util.Random;

import com.kuznetsov.lightingcontrol.ColorFragment;
import com.kuznetsov.models.ColorModel;
import com.kuznetsov.utils.DataBaseHelper;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.util.SparseArray;
import android.view.ViewGroup;

public class ColorListAdapter extends FragmentStatePagerAdapter {

	public static final int NUMBER_OF_COLORS = (int) (256);
	public static final String COLOR_LIST_MODE = "colorMode";
	public static final String COLOR_NUMBER = "colorNumber";
	public ArrayList<ColorModel> colors;
	Context context;
	Random r = new Random();
	SparseArray<ColorFragment> registeredFragments = new SparseArray<ColorFragment>();
	
	public ColorListAdapter(FragmentManager fm) {
		super(fm);
		colors = new ArrayList<>(DataBaseHelper.getColors());
	}

	@Override
	public Fragment getItem(int number) {
		// TODO Auto-generated method stub
		ColorFragment colorFragment = new ColorFragment();
		Bundle colorBundle = new Bundle();
		colorBundle.putInt(COLOR_LIST_MODE,  (1) );
		Random r = new Random();
		colorBundle.putInt(COLOR_NUMBER, colors.get(number).color);
		colorBundle.putInt("debug", number);
		colorFragment.setArguments(colorBundle);
		return colorFragment;
	}

	@Override
	public int getCount() {
		return colors.size();
	}
    
	@Override
	public int getItemPosition (Object object)
	{
	      return POSITION_NONE;
	}

    
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
		ColorFragment fragment = (ColorFragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    public ColorFragment getRegisteredFragment(int position) {
        return registeredFragments.get(position);
    }
    
    public void removeItem(int position) {
    	try
    	{
    		colors.get(position).delete();
    		colors.remove(position);
    	}
    	catch (IndexOutOfBoundsException ex) {
    		
    	}
    	finally {
    		this.notifyDataSetChanged();
    	}
    }
    
    @Override
    public float getPageWidth(int position) {
    	// TODO Auto-generated method stub
    	if(colors.size() < 10)
    		return (1.0f / colors.size());
    	return (1.0f / 10);
    }  
   

}



Использую для отображения сразу нескольких элементов
@Override
    public float getPageWidth(int position) {
    	// TODO Auto-generated method stub
    	if(colors.size() < 10)
    		return (1.0f / colors.size());
    	return (1.0f / 10);
    }


Элементы добавляются\удаляются динамически.
Пробовал Viewpagerу в xml ставить gravity="center" - не помогло.
Пробовал использовать сторонюю реализацию viewpagera , но она то ли отстала от support lib, то ли я её неправильно подключил.

Также при отображении нескольких элементов, не получается свайпом перейти к последнему. Показывает что уже у границ, а хочется элемент в центр поставить. ViewPager.setCurrentPage(position) не центрирует последний

сам фрагмент - imageview размером 25x25dp которые заполняется определенным цветом
  • Вопрос задан
  • 2492 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы