我想将 2 个视图链接在一起。ViewPager 和表示这种 ViewPager 状态的视图,类似于选项卡,但它可以以不同的方式显示(与通常的选项卡相同,一个文本视图,但只是文本会改变),它只是实现了一些接口。编程上我可以做到这一点,比如
myViewPager.setIndicator(myIndicatorView);
但是,为此我必须在某些父视图中找到这两个视图并调用此方法。我想简化它,并且有能力在 xml 模式中简单地管理它。这里是 xml 的示例。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/someTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.example.views.TextTabs
android:id="@+id/info_tabs"
android:layout_width="match_parent"
android:layout_height="@dimen/info_tabs_height"
android:background="@drawable/header_gradient" />
<com.example.views.InfoPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
custom:tabs="@id/info_tabs" />
</LinearLayout>
我创建了自定义属性并将其引用到视图 ID。所以我的构造函数是:
public ViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
//Getting view id from xml attribute
TypedArray attr = context.obtainStyledAttributes(attrs, R.styleable.ViewPager);
//This id equals R.id.info_tabs
int id = attr.getResourceId(R.styleable.ViewPager_tabs, -1);
if (id != -1) {
//i want to find view from all activity
View tabs = ((Activity) context).findViewById(id);
if (tabs != null && tabs instanceof ViewPagerTabs) {
// if tabs finded
mTabs = (ViewPagerTabs) tabs;
setIndicator(mTabs);
}
}
}
问题是我无法通过 id 查看。这个想法是指示器视图可以在不同的地方,它可以是寻呼机的兄弟,它可以在更高级别的寻呼机等等。这就是为什么我试图从 Activity 中找到它。但即使从父视图中我也找不到它,因为 getParent 返回 null。
那么我怎样才能从另一个不是他父母的观点中找到观点呢?或者,也许您还有其他解决方案?