Удалить представление из PagerAdapter в Android

Я просмотрел несколько веб-сайтов, сайтов разработчиков Android, и после того, как мне не повезло, мне пришлось обратиться за помощью к сообществу. Вся помощь и предложения будут высоко оценены.

ПРОБЛЕМА:

Всего у меня есть 12 изображений, которые я получаю с сервера (здесь анализ), и я показываю каждое из них в PagerAdapter. Если все значения не нулевые, код адаптера работает нормально, но поворот в том, что я разрешаю хранить нулевые значения на сервере. Когда я получаю весь список с сервера, я просто хочу, чтобы в адаптере были те представления, которые содержат не нуль. Пример. Предположим, я получаю 5 нулевых путей, тогда мой адаптер показывает всего 12 представлений (7 с изображениями, остальные в виде пустых страниц).

Код моего адаптера:

public class ProfileImageAdapter extends PagerAdapter implements OnTouchListener{

    private Context localContext;
    private LayoutInflater inflater;
    private List<DataModel> parseObjects = new ArrayList<DataModel>();
    private List<Integer> res = new ArrayList<Integer>();
    // Declare Variables
    private ImageView viewPagerDisplayImage;

    /**
     * 
     * @param context : The context where to display
     * @param parseObjects : The ParseObject to work with
     */
    public ProfileImageAdapter(Context context, List<DataModel> parseObjects) {
        this.localContext = context;
        this.parseObjects = parseObjects;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view == ((LinearLayout) object) && object != null);
    }

    /**
     * What is the item to show
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        inflater = (LayoutInflater) localContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.profile_image_item, container, false);

        // Locate the Image View in viewpager_item.xml
        viewPagerDisplayImage = (ImageView) itemView.findViewById(R.id.view_pager_display_image_view);

        // Getting the image
        try {
            ParseFile imageFile = parseObjects.get(position).getImage();
            if (imageFile != null) {
                byte[] bitmapImageData = imageFile.getData();
                Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapImageData, 0, bitmapImageData.length);
                viewPagerDisplayImage.setImageBitmap(bitmap);
                viewPagerDisplayImage.setOnTouchListener(this);
                // Add viewpager_item.xml to ViewPager

                itemView.setTag("VALID");
                ((ViewPager) container).addView(itemView);
            } else {
                ((ViewPager) container).addView(itemView);
                itemView.setTag("INVALID");
                destroyItem(container, position, itemView);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return itemView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        //((ViewPager) container).invalidate();
        ((ViewPager) container).removeView((View) object);
    }
}

Моя активность на пейджере

public class PageViewerProfileImages  extends Activity {

    private ViewPager viewPager;
    private ProfileImageAdapter profileImageAdapter;
    private UserModel userModel = new UserModel();

    // Create the Page View for the Profile Images
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.profile_pager);

        List<DataModel> parseObjects = userModel.getDataModels();
        viewPager = (ViewPager) findViewById(R.id.pagerProfile);
        profileImageAdapter =  new ProfileImageAdapter(this, parseObjects);
        // Setting the adapter
        viewPager.findViewWithTag("VALID");
        viewPager.setAdapter(profileImageAdapter);
    }

}

Мои ссылки:

  1. http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#instantiateItem(android.view.ViewGroup, int)
  2. ViewPager PagerAdapter не обновляет представление

person suman das    schedule 06.04.2015    source источник


Ответы (1)


  1. Создайте условие, в котором вы анализируете ответ сервера.
  2. if(imageUrl!=null){ // write code to add image url in your list, which will you pass in your adapter. } После его использования он будет передавать в адаптер только те значения в адаптере, которые имеют какое-то значение, тогда он будет работать.

  3. Вы можете поместить это условие в адаптер, когда вы передаете свой список URL-адресов изображений и назначаете значение в своем списке адаптеров. затем, прежде чем присваивать значение, проверьте то же условие, а затем назначьте.

person Yogendra    schedule 06.04.2015
comment
Отличный чувак... три дня старался выглядеть маленьким... +1, но не смог принять из-за какой-то репутации... - person suman das; 06.04.2015
comment
Еще одна вещь, есть ли способ сделать это в классе адаптера без отправки обновленного/измененного ответа, тогда, пожалуйста, предложите!! Еще раз спасибо за ваш ответ! - person suman das; 06.04.2015