当前位置: 首页 > 知识库问答 >
问题:

如何在ViewPager,instantiateItem()中的每个页面上显示不同的文本

蒋嘉颖
2023-03-14

在ViewPager的CustomPagerAdapter中,在instantiateItem()方法中,我试图创建一个TextView,然后根据特定条件为每个页面设置不同的文本。从页面光标读取文本。下面是一个代码:

@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;            
}

但是,ViewPager的行为与预期不符。第一页和第二页具有相同的文本,其余页具有预期的“锁定”符号。当我滑动到第4页并返回到第一页时,第一页由假设位于第二页的文本组成。我还尝试使用myViewPager。setOffscreenPageLimit(numberOfPages)但是它没有帮助。

我找到了这个答案:

“在实例化项中,位置参数是需要呈现的位置。它不是用户将看到的当前焦点项目的位置。当前显示的视图左侧和右侧的页面需要在内存中预先呈现,以便这些屏幕的动画流畅。"

这对我来说很有意义,但是我如何才能正确显示页面内容,然后根据需要更新它?请告知是否有不同的方法可以使用跳过instantiateItem()方法来做到这一点,这会导致问题的混乱和混乱。谢谢你。

共有2个答案

益和雅
2023-03-14

您可以创建 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");

        }
    });
宰父俊民
2023-03-14

我通过使用不同的实现解决了这个问题:

// 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;
    }
}
 类似资料:
  • 问题内容: 我有以下脚本。而且我想使两个地图都显示在页面上,但是无论我怎样尝试,我都只能使第一个地图显示initialize(),而第二个地图则没有。有什么建议么?(而且,我无法在代码中添加它,但是在“ 感谢” 中显示了第一张地图! 问题答案: 这就是我使用能够在同一页面上生成多个地图的方式。请注意,这是解决上述问题的现成代码。 HTML位 地图初始化的Javascript

  • 问题内容: 我在一页上有2个表格。其中一种形式具有始终显示的Recaptcha。另一个应仅在某些事件(例如,最大程度地尝试登录)后才显示recaptcha。所以有时候我需要2个Recaptchas才能出现在同一页面上。这可能吗?我知道我可能两者都可以使用一个,但是我有布局的方式,我更喜欢有2个。谢谢。 更新: 嗯,我想这可能是不可能的。有人可以推荐另一个捕获库与reCaptcha一起使用吗?我真的

  • 有人知道我如何为分页页面设置不同的posts_per_pages吗? 例如: 主页=每页帖子20主页第2-5页=每页帖子10 我使用的查询是$wp\u query-

  • 你好,我有一个带有slidingtab的活动,一个viewpager,在viewpager中,我以编程方式添加了Listviews 问题是,如果showMenu为true,则上下文菜单不会显示,但如果showMenu为false,则其他函数工作。因此“OnItemClickListener”似乎没有问题,因为它被正确调用了,但问题是“ShowContextMenuForChild”。 我做错了什么

  • 我正在使用控件。我在每一页中都有一个图像和许多。我使用左、右填充以及在显示选定页面时部分显示下一页和上一页。 我想一次显示多个页面,而正在。一旦滚动停止,您希望仅在中间显示选定页面,并部分显示上一页和下一页(就像滚动开始之前一样)。 我尝试在< code>ViewPager滚动时增加“左”和“右”填充,并在滚动停止时重置< code >填充。增加填充效果很好,我可以一次看到多个页面。但是将填充重置