Android ViewPagerAdapter返回错误的位置
我正在开发一个使用ViewPager的应用程序 在ViewPager下面,有一些要点应该指示显示的是哪个页面,但它们的行为是错误的 以下是活动部分:Android ViewPagerAdapter返回错误的位置,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我正在开发一个使用ViewPager的应用程序 在ViewPager下面,有一些要点应该指示显示的是哪个页面,但它们的行为是错误的 以下是活动部分: ind1 = (ImageView)findViewById(R.id.page1); ind2 = (ImageView)findViewById(R.id.page2); ind3 = (ImageView)findViewById(R.id.page3); ind4 = (Ima
ind1 = (ImageView)findViewById(R.id.page1);
ind2 = (ImageView)findViewById(R.id.page2);
ind3 = (ImageView)findViewById(R.id.page3);
ind4 = (ImageView)findViewById(R.id.page4);
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
下面是适配器:
/*Adapter for ViewPager*/
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
ind1.setImageResource(on);
ind2.setImageResource(off);
ind3.setImageResource(off);
ind4.setImageResource(off);
return Frag1.newInstance();
case 1:
ind1.setImageResource(off);
ind2.setImageResource(on);
ind3.setImageResource(off);
ind4.setImageResource(off);
return Frag2.newInstance();
case 2:
ind1.setImageResource(off);
ind2.setImageResource(off);
ind3.setImageResource(on);
ind4.setImageResource(off);
return Frag3.newInstance();
case 3:
ind1.setImageResource(off);
ind2.setImageResource(off);
ind3.setImageResource(off);
ind4.setImageResource(on);
return Frag4.newInstance();
default:
ind1.setImageResource(on);
ind2.setImageResource(off);
ind3.setImageResource(off);
ind4.setImageResource(off);
return Frag1.newInstance();
}
}
@Override
public int getCount() {
return NUM_PAGES; /*NUM_PAGES = 4*/
}
}
这是Frag1其他片段与Frag1相同,唯一的区别是布局和加载的HTML文件:
public class Frag1 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.frag_page_1, container, false);
WebView wv = (WebView) rootView.findViewById(R.id.webView1);
wv.loadUrl("file:///android_asset/html/tabel1.html");
wv.setBackgroundColor(0x00000000);
wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
return rootView;
}
public static Frag1 newInstance(){
Frag1 f = new Frag1();
return f;
}
}
错误行为如下:当活动开始时,显示第一个片段,但“活动”项目符号点是第二个,对于第二页,活动点是第三个,对于第三页,活动点是第四个,对于第四页,第四个点保持活动。如果我滑回第三页,则第二个项目符号处于活动状态
简单来说,活动项目符号与显示的页面不匹配
我尝试打印适配器中的位置,如下所示,在每个情况下:
活动开始时,将打印两条连续消息0和1,而不与ViewPager交互
当我更改页面时,位置总是错误的,但相对片段显示正确
我试图在fragments类中设置项目符号状态,但没有任何更改
为什么适配器指示错误的位置?如何使正确的项目符号指示正确显示的页面 ViewPager将加载可见片段和周围的其他片段。如果打开片段3,它将为2和4调用getView。如果打开0,它也会加载1好的,但是我如何才能获得打开片段的正确位置?就像在listview中,您不使用适配器获取当前位置,而是使用列表。使用ViewPager.setOnPageChangeListener来做这件事,我试过了,效果很好。我已经尝试过ViewPager.setOnPageChangeListener,但总是在适配器内部。糟糕的选择。非常感谢。
Toast.makeText(context, String.valueOf(position), Toast.LENGTH_SHORT).show();