我正在开发一个使用ViewPager
的应用程序。
在ViewPager
下方,有一些项目符号可以指示显示哪个页面,但它们的行为是错误的。
这是活动部分:
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;
}
}
错误的行为如下:当活动开始时,显示第一个片段,但“活动”项目符号点是第二个,第二个页面活动点是第三个,第三个页面活动第四个,对于第四页,第四点仍然有效。如果我向后滑动到第三页,则第二个项目符号点处于活动状态。
简单来说,活动项目符号点与显示的页面不匹配。
我尝试在每个Adapter
下的case:
中打印位置,如下所示:
Toast.makeText(context, String.valueOf(position), Toast.LENGTH_SHORT).show();
当活动开始时,会连续打印两条消息0
和1
,而不会与ViewPager交互。
当我更改页面时,position
总是错误的,但相对片段会正确显示。
我试图在片段类中设置项目符号点状态,但没有任何改变。
为什么适配器指示错误的位置?如何才能使正确的项目符号指示正确显示的页面?