タブを持つ FragmentActivity があります。最初のタブには ViewPager があります。ViewPager が機能しません。最初のページを表示しますが、次のページにスクロールしません。次のページで instantiateItem が呼び出されるのを見ました。タッチが何か他のものによって傍受されているのではないかと思いますが、よくわかりません。
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabHost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/topbanner" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/hometab"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/product_viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ScrollView
android:id="@+id/scroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/articlestab"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
<LinearLayout
android:id="@+id/videostab"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txt3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="This is tab 3" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
ViewPager に入れた image_page を 6 つ追加します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/image_page"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_gravity="center_vertical"
android:src="@drawable/app" />
<TextView
android:id="@+id/caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textStyle="bold" />
</LinearLayout>
ここにアダプターを追加します。
MyPagerAdapter adapter = new MyPagerAdapter();
ViewPager myPager = (ViewPager) findViewById(R.id.product_viewpager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(0);
アダプターは次のとおりです。
private class MyPagerAdapter extends PagerAdapter {
public int getCount() {
return 6;
}
public Object instantiateItem(View collection, int position) {
String image = null;
String caption = null;
Log.d(TAG, "instantiateItem called for position: " + position);
if (sliderResults != null) {
LinearLayout layout1 = null;
LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
JSONArray jArray = null;
try {
jArray = new JSONArray(sliderResults);
JSONObject j = jArray.getJSONObject(0);
layout1 = (LinearLayout) inflater.inflate(R.layout.image_page, null);
switch (position) {
case 0:
image = "img1";
caption = "capt1";
break;
case 1:
image = "img2";
caption = "capt2";
break;
case 2:
image = "img3";
caption = "capt3";
break;
case 3:
image = "img4";
caption = "capt4";
break;
case 4:
image = "img5";
caption = "capt5";
break;
case 5:
image = "img6";
caption = "capt6";
break;
}
new DownloadImageTask((ImageView) layout1.findViewById(R.id.image), 100).execute("http://removed" + j.getString(image));
((TextView) layout1.findViewById(R.id.caption)).setText(j.getString(caption));
} catch (JSONException e) {
Log.d(TAG, "JSONException");
e.printStackTrace();
}
// View view = inflater.inflate(resId, null);
((ViewPager) collection).addView(layout1, 0);
return layout1;
}else{
Log.d(TAG, "slider results not ready yet");
}
return null;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
}
同じコードでテスト ビュー アクティビティを作成すると、ViewPager が機能します。それは私が信じている TabHost と関係があります。多分それはタッチイベントか何かの傍受ですか?