0

私には、自分の道を理解できない興味深い癖があります。そこで、ウィジェットの周りにレイアウトをラップして、いくつかのイベントやその他の便利なメソッドを追加できるようにしました。ただし、ウィジェットのコンストラクターを使用すると、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();
    }

}

誰かが理由を知っていますか?ありがとう!

4

1 に答える 1

0

それを解決し、間違ったイベントでそれを膨らませていることに気づきました。コンストラクターで実行する必要があります。ここに正しいコードがあります:http://pastebin.com/hYDhXxdp

于 2011-10-23T08:43:09.930 に答える