Дочерние элементы Android ViewPager не отображаются при создании экземпляра с использованием составного виджета, а не раздутого макета - PullRequest
0 голосов
/ 23 октября 2011

У меня есть интересная причуда, которую я не могу понять.Поэтому я обернул свой макет вокруг виджета, чтобы я мог добавить некоторые события и другие удобные методы.Однако, используя конструктор виджета, я не могу создать его экземпляр как дочерний элемент в ViewPager.Если я, однако, раздуваю компоновку без оболочки виджета, она работает.

Вот код, который работает: (Тот, который не работает, закомментирован)

private View getNewTabView() {
    View view = getLayoutInflater().inflate(
            R.layout.checkpoint_new_tab_view, null);

    // XmlPullParser parser = getResources().getXml(
    // R.layout.checkpoint_new_tab_view);
    // AttributeSet as = Xml.asAttributeSet(parser);
    // NewCheckpointsTabVIew view = new NewCheckpointsTabVIew(this, as);
    return view;
}

Вот мойКод адаптера для моего ViewPager

private class CheckpointPagerAdapter extends PagerAdapter {

    @Override
    public void destroyItem(View collection, int position, Object view) {
        ((ViewPager) collection).removeView((ScrollView) view);
    }

    @Override
    public void finishUpdate(View arg0) {
    }

    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public Object instantiateItem(View arg0, int arg1) {
        View child = getNewTabView();
        ((ViewPager) arg0).addView(child, 0);
        return child;
    }

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

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void startUpdate(View arg0) {
    }

}

И вот оболочка для виджета, который обтекает раздутое расположение:

public class NewCheckpointsTabVIew extends ScrollView {

    Context context;

    public NewCheckpointsTabVIew(Context context) {
        super(context);
        this.context = context;
    }

    public NewCheckpointsTabVIew(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    private void init() {
        // height + width
        android.view.ViewGroup.LayoutParams params = getLayoutParams();
        params.height = android.view.ViewGroup.LayoutParams.FILL_PARENT;
        params.width = android.view.ViewGroup.LayoutParams.FILL_PARENT;
        setLayoutParams(params);
    }

    @Override
    public void onFinishInflate() {
        super.onFinishInflate();
        LayoutInflater layoutInflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutInflater.inflate(R.layout.checkpoint_new_tab_view, this);
    }

    @Override
    public void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        init();
    }

}

Кто-нибудь знает почему?Спасибо!

1 Ответ

0 голосов
/ 23 октября 2011

Решил, понял, что я раздувал это не в том случае, это должно быть сделано в конструкторе. Вот правильный код: http://pastebin.com/hYDhXxdp

...