gpt4 book ai didi

android - ViewPager中如何在每个页面显示不同的文字,instantiateItem()混淆

转载 作者:行者123 更新时间:2023-11-29 21:58:35 26 4
gpt4 key购买 nike

在 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 的行为并不像预期的那样。第一页和第二页具有相同的文本,其余页面如预期的那样具有“LOCKED”标志。当我滑动到第 4 页并返回到第一页时,第一页包含应该在第二页中的文本。我也尝试使用 myViewPager.setOffscreenPageLimit(numberOfPages) 但它没有帮助。

我找到了这个答案:

"在instantiateItem内部,position参数是需要渲染的位置,不是当前用户看到的焦点item的位置,当前显示view左右两侧的页面需要渲染在内存中预先呈现,以便这些屏幕的动画流畅。”

这对我来说很有意义,但是我怎样才能正确显示页面内容,然后根据需要更新它呢?请告知是否有不同的方法来跳过 instantiateItem() 方法,这会在问题中引入困惑和困惑。谢谢。

最佳答案

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

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

关于android - ViewPager中如何在每个页面显示不同的文字,instantiateItem()混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com