У меня есть интересная причуда, которую я не могу понять.Поэтому я обернул свой макет вокруг виджета, чтобы я мог добавить некоторые события и другие удобные методы.Однако, используя конструктор виджета, я не могу создать его экземпляр как дочерний элемент в 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();
}
}
Кто-нибудь знает почему?Спасибо!