我试图通过 Viewpager.findViewWithTag 从ViewPager获取当前页面视图。当尝试从ViewPager获取当前视图时,它返回Null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_main);
Bundle bundle = getIntent().getExtras();
chapter = bundle.getInt("chapter");
ViewPagerAdapter adapter = new ViewPagerAdapter(this, chapter);
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
View myView = pager.findViewWithTag(pager.getCurrentItem());
...这里是我的ViewPageAdapter
@Override
public Object instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater;
if(position != 10){
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.viewpager_item, container,
false);
itemView.setTag(position);
} else {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.results, container,
false);
}
container.addView(itemView);
return itemView ;
}
这里是viewpager_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
和这里的viewpager_item.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:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:gravity="center_horizontal" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:background="#fff"
android:scaleType="fitCenter"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<Button
android:id="@+id/Button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="1"
android:text="1" />
<Button
android:id="@+id/Button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="2"
android:text="2" />
<Button
android:id="@+id/Button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="3"
android:text="3" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
<Button
android:id="@+id/Button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="4"
android:text="4" />
<Button
android:id="@+id/Button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="5"
android:text="5" />
</LinearLayout>
我不知道我在哪里犯了错误但无法修复它。感谢
答案 0 :(得分:4)
你可以尝试这样的事情 -
@Override
public Object instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater;
if(position != 10){
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.viewpager_item, container,
false);
itemView.setTag("View"+position);
} else {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.results, container,
false);
}
container.addView(itemView);
return itemView ;
}
当您需要当前视图时 -
View myView = pager.findViewWithTag("View"+pager.getCurrentItem());
答案 1 :(得分:1)
这里的问题是,您通过
设置PagerAdapter后立即调用pager.getCurrentItem()。pager.setAdapter(adapter);
不一定必须立即创建页面。那就是在调用
之后调用PageAdapter.instantiateItem。View myView = pager.findViewWithTag(pager.getCurrentItem());
如果在创建视图后立即需要该视图,则只需在适配器中执行所需的操作,否则,如果在诸如OnPageChangeListener.onPageSelected之类的侦听器中调用,则您的调用应该可以工作。
答案 2 :(得分:0)
您应该使用字符串作为标记。
每次要使用int作为标记时,都可以使用String.valueOf(yourPosition);
。
至于文件: 为此视图提供包含String的标记,稍后将使用View.getTag()检索或使用View.findViewWithTag()搜索。通常最好使用ID(通过android:id属性)而不是标签,因为它们更快并允许编译时类型检查。
必须是字符串值,使用'\;'转义unicode字符的'\ n'或'\ uxxxx'等字符。
http://developer.android.com/reference/android/view/View.html#attr_android%3atag