我正在使用带 fragment 的 viewpager 开发应用程序。在我的应用程序中,我有一个项目显示在列表中。之后,当我单击时,我调用 SherlockFragmentActivity,它调用带适配器的 ViewPager。现在问题是 FragmentPagerAdapter 中的 getItem 给出多个位置在一个时间。当我翻转 backword 然后也给出错误的位置。这是我的代码
ViewPager 代码:-
private void initialisePaging() {
//Adapter Context;
this.mPagerAdapter = new MyPagerAdapter(
super.getSupportFragmentManager(), getApplicationContext(),
title, link, description);
ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);
pager.setAdapter(this.mPagerAdapter);
//Take position from ListView & set postion .
pager.setCurrentItem(post_position);
}
负责设置 fragment 的我的适配器类:-
问题:- 问题是 getItem 调用了 3 次,假设我点击了 4 个项目,它给了我 3、4、5 个数字。
public MyPagerAdapter(FragmentManager fm, Context cont,
ArrayList<String> title, ArrayList<String> link,
ArrayList<String> description) {
super(fm);
this.context = cont;
this.key_desc = description;
this.key_link = link;
this.key_title = title;
viewPagerApplication = (RssItem) cont;
}
@Override
public Fragment getItem(int position) {
return Fragment0.newInstance(position, this.context, key_title,
key_link, key_desc);
}
@Override
public int getCount() {
return key_title.size();
}
My Fragment Class:-
Problem:-Here if i show postion in textview its correct position but if i want take position in logcat for further parsing its giving me again 4,3,5 number which is also diffrent from getItem();
public static Fragment0 newInstance(int num,Context cont, ArrayList<String> key_title, ArrayList<String> key_link, ArrayList<String> key_desc) {
context=cont;
Fragment0 f = new Fragment0();
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
};
public int getShownIndex() {
return getArguments().getInt("num", 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.newsdetailfragment_screen, container, false);
tv = v.findViewById(R.id.headingtextview_id);
((TextView)tv).setText(String.valueOf(getShownIndex()));
((TextView)tv).setTextColor(Color.BLACK);
((TextView)tv).setTextSize(20);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
现在请让我知道我哪里错了以及我怎样才能得到一个确切的位置以进行进一步处理。
最佳答案
在getItem()内部,position参数是需要渲染的位置。它不是用户会看到的当前聚焦项目的位置。当前显示 View 左侧和右侧的页面需要在内存中预先呈现,以便这些屏幕的动画流畅。要获取当前位置的项目,请使用:
pager.getCurrentItem();
如果您需要页面的实际位置,您可以实现 onPageChangeListener
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
position in onPageSelected 将给出页面的准确当前位置。
关于android - getItem() 在 FragmentPagerAdapter 中多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214063/