私はついにこれを行う方法を見つけました。
onAttachedToWindow
PagerTitleStripので、これは親がViewPagerであることを確認します。
final ViewParent parent = getParent();
if (!(parent instanceof ViewPager)) {
throw new IllegalStateException("PagerTitleStrip must be a direct child of a ViewPager.");
}
したがって、これは行く必要があります。
解決:
独自のカスタムPagerTitleStrip/PagerTabStripを作成することで、これを解決しました。上記の動作を削除し、ViewPagerを指すPagerTitleStripのスタイル可能な属性に置き換えました。これは、values/attrs.xmlで次のように定義されています。
<declare-styleable name="PagerTitleStripCustom">
<attr name="parentViewPager" format="reference" />
</declare-styleable>
そして、次のようにPagerTitleStripコンストラクターを読み取ります。
TypedArray types = context.obtainStyledAttributes(attrs,R.styleable.PagerTitleStripCustom, 0, 0);
pagerID = types.getResourceId(R.styleable.PagerTitleStripCustom_parentViewPager, 0);
ここで、mViewPager変数がnullであるonAttachedToWindow
ことを確認し、次のようにpagerIDに割り当てることができます。
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
final ViewParent parent = getParent();
ViewPager pager = null;
if (pagerID != 0) {
View test2 = ((View) parent).findViewById(pagerID);
pager = (ViewPager) test2;
} else if (pagerID == 0 && (parent instanceof ViewPager)) {
pager = (ViewPager) parent;
} else if (pagerID == 0 && !(parent instanceof ViewPager)) {
throw new IllegalStateException("PagerTitleStrip is neither a direct child of a ViewPager nor did you assign the ID of the ViewPager.");
} else {
throw new IllegalStateException("PagerTitleStrip: Something went completely wrong.");
}
final PagerAdapter adapter = pager.getAdapter();
pager.setInternalPageChangeListener(mPageListener);
pager.setOnAdapterChangeListener(mPageListener);
mPager = pager;
updateAdapter(mWatchingAdapter != null ? mWatchingAdapter.get() : null, adapter);
}
これで、PagerTitleStrip / PagerTabStripコントロールを、次のようにレイアウトに自由に配置できます。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.YOUR.PATH"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/main_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.v4.view.PagerTabStripCustom
android:layout_width="match_parent"
android:layout_height="wrap_content"
custom:parentViewPager="@id/main_pager" />
</RelativeLayout>
これは、概念の迅速で汚い証明にすぎません。これが誰かを助けることを願っています。