次のレイアウトでAndroidアプリケーションを構築しています。
layout_height="wrap_content"
ViewPager では機能しないことが既にわかっています。
私の質問は、動的に変更する方法です。ViewPager のコンテンツは、2 つの xml レイアウトから拡張されます。vp_statistics.xml and vp_campaigns.xml.
ViewPager の xml は次のとおりです。
<LinearLayout
android:id="@+id/topcontent_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:id="@+id/viewpager_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
これが私のPagerAdapterのコードです
class MyPagerAdapter extends PagerAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return 2;
}
public Object instantiateItem(View collection, int pos){
LayoutInflater inflater = (LayoutInflater)collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int resId = 0;
switch(pos){
case 0:
resId = R.layout.vp_statistics;
break;
case 1:
resId = R.layout.vp_campaigns;
break;
}
View view = inflater.inflate(resId, null);
((ViewPager)collection).addView(view, 0);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
((ViewPager)container).removeView((View)object);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == ((View)arg1);
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
}
そして、Activity クラスの onCreate() メソッド内:
MyPagerAdapter adapter = new MyPagerAdapter();
ViewPager viewPager = (ViewPager)findViewById(R.id.viewpager);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0);
vp_statistics.xml
およびレイアウトの高さを取得し、オブジェクトが呼び出されるたびvp_campaigns.xml
に動的に割り当てる方法はありますか?ViewPager (@id/viewpager)
instantiateItem()