我正在使用PagerAdapter,并希望使用findViewWithTag方法,但它始终返回null。
在instantiateItem中我正在实例化我的页面视图
public Object instantiateItem(View view, int position) {
View pageView = getPage(position);
((ViewPager) view).addView(pageView);
return pageView;
}
在getPage方法中,我这样做:
LinearLayout pageView = (LinearLayout)mInflater.inflate(R.layout.pageritem_news,null,false);
在for循环中,我试图通过标记获取pageView内的视图,但它总是返回null,有人有任何想法吗?
也许问题可能是由pageritem_news.xml引起的,因为我使用include来包含布局视图并在xml的<include />
中定义android:标签?
更新 pageritem_news.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:weightSum="3" >
<include
android:id="@+id/newspage_item_row_0_left"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="0"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_0_middle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="5"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_0_right"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="10"
layout="@layout/listitem_news"
android:visibility="invisible" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/list_divider_height"
android:background="@drawable/horizontal_divider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:weightSum="3" >
<include
android:id="@+id/newspage_item_row_1_left"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="1"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_1_middle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="6"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_1_right"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="11"
layout="@layout/listitem_news"
android:visibility="invisible" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/list_divider_height"
android:background="@drawable/horizontal_divider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:weightSum="3" >
<include
android:id="@+id/newspage_item_row_2_left"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="2"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_2_middle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="7"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_2_right"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="12"
layout="@layout/listitem_news"
android:visibility="invisible" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/list_divider_height"
android:background="@drawable/horizontal_divider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:weightSum="3" >
<include
android:id="@+id/newspage_item_row_3_left"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="3"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_3_middle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="8"
layout="@layout/listitem_news"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_3_right"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="13"
layout="@layout/listitem_news"
android:visibility="invisible" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/list_divider_height"
android:background="@drawable/horizontal_divider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:weightSum="3" >
<include
android:id="@+id/newspage_item_row_4_left"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
layout="@layout/listitem_news"
android:tag="4"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_4_middle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
layout="@layout/listitem_news"
android:tag="9"
android:visibility="invisible" />
<include
android:id="@+id/newspage_item_row_4_right"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
layout="@layout/listitem_news"
android:tag="14"
android:visibility="invisible" />
</LinearLayout>
</LinearLayout>
PagerAdapter的相关代码部分:
@Override
public Object instantiateItem(View view, int position) {
View pageView = getPage(position);
((ViewPager) view).addView(pageView);
return pageView;
}
private View getPage(int position) {
LinearLayout pageView = (LinearLayout)mInflater.inflate(R.layout.pageritem_news,null ,false);
int index=0;
View viewToBuild = null;
while (index < mMovers.size()) {
viewToBuild = pageView.findViewWithTag(String.valueOf(index));
System.out.println("View to build: " + viewToBuild);
if (viewToBuild != null) {
buildNewsView(viewToBuild, mNews.get(index));
}
index++;
}
return pageView;
}
答案 0 :(得分:4)
根据the documentation,您只能在使用layout_*
时覆盖<include />
个属性(基本上,任何会进入相应LayoutParams
对象的内容)。
此功能有here的增强请求。
我建议找到一种方法来做你正在尝试用ID做的事情。例如,您可以拥有可以迭代的TypedArray个ID。您可以在每个配置的配置基础上更改此数组(这样,它不在您的代码中,并且您具有在XML中定义标记的所有好处)。