Android 如何在ViewPager中的每页上显示不同的文本,实例化Item()
在ViewPager的CustomPagerAdapter中,在InstanceItem()方法中,我试图创建一个TextView,然后根据特定条件为每个页面设置不同的文本。文本从页面光标读取。下面是一个代码:Android 如何在ViewPager中的每页上显示不同的文本,实例化Item(),android,android-viewpager,Android,Android Viewpager,在ViewPager的CustomPagerAdapter中,在InstanceItem()方法中,我试图创建一个TextView,然后根据特定条件为每个页面设置不同的文本。文本从页面光标读取。下面是一个代码: @Override public Object instantiateItem(ViewGroup collection, int position) { sc = new ScrollView(context); sc.setLayoutParams(new LayoutParams
@Override
public Object instantiateItem(ViewGroup collection, int position) {
sc = new ScrollView(context);
sc.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
sc.setFillViewport(true);
tv = new TextView(context);
if(position < count) {
tv.setText(pages.getString(1));
pages.moveToPosition(position);
}else {
tv.setText("LOCKED");
}
tv.setTag(TAG_PAGE + position);
tv.setGravity(Gravity.CENTER);
tv.setTextColor(Color.BLACK);
tv.setTextSize(30);
sc.addView(tv);
((ViewPager) collection).addView(sc);
return sc;
}
@覆盖
公共对象实例化项(视图组集合,int位置){
sc=新的滚动视图(上下文);
sc.setLayoutParams(新的LayoutParams(LayoutParams.WRAP_内容,LayoutParams.WRAP_内容));
sc.setFillViewport(真);
tv=新文本视图(上下文);
如果(位置<计数){
tv.setText(pages.getString(1));
页面。移动位置(位置);
}否则{
tv.setText(“锁定”);
}
tv.setTag(标签页+位置);
电视。设置重力(重力。重心);
tv.setTextColor(Color.BLACK);
电视.setTextSize(30);;
sc.addView(电视);
((ViewPager)集合)。添加视图(sc);
返回sc;
}
但是,ViewPager的行为不符合预期。第一页和第二页具有相同的文本,其余页面具有预期的“锁定”标志。当我滑入第4页并返回到第一页时,第一页由假定位于第二页的文本组成。我还试着使用myViewPager.setOffscreenPageLimit(numberOfPages),但是没有帮助
我找到了这个答案:
“在InstanceItem内部,position参数是需要渲染的位置。用户将看到的不是当前焦点项目的位置。当前显示视图左侧和右侧的页面需要在内存中预渲染,以便这些屏幕的动画平滑。”
这对我来说很有意义,但我如何才能正确显示页面内容,然后根据需要进行更新?如果跳过instanceItem()方法会给问题带来混乱和混乱,请告知是否有不同的方法。谢谢。您可以创建ViewPager对象,然后在此对象上设置侦听器
ViewPager myPager = (ViewPager) findViewById(R.id.yourPagerid);
myPager.setAdapter(adapter);
myPager.setCurrentItem(0);
myPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
//You can change textview word according to current page
switch (position) {
case 0:
break;
case 1:
break;
case 2:
break;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// Log.d("check","onPageScrolled");
}
@Override
public void onPageScrollStateChanged(int arg0) {
// Log.d("check","onPageScrollStateChanged");
}
});
我通过使用不同的实现解决了此问题:
// Adapter class
private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
return PageFragment.newInstance(pages[index]); // Pages is an array of Strings
}
@Override
public int getCount() {
return numberOfPages;
}
}
// PageFragment class
public class PageFragment extends Fragment {
TextView tv;
public static PageFragment newInstance(String page) {
PageFragment pageFragment = new PageFragment();
Bundle bundle = new Bundle();
bundle.putString("pageContent", page);
pageFragment.setArguments(bundle);
return pageFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
tv = (TextView) view.findViewById(R.id.text_view);
tv.setText(getArguments().getString("pageContent"));
return view;
}
}
谢谢你的回复;然而,这并不能解决问题。我仍然需要一个instanceItem()来在第一次滑动页面之前显示文本视图。onPageSelected()之后会调用InstanceItem(),它会覆盖它。不,您可以在每个实例上添加textview,使其为我的项目工作