【问题标题】:getItem() calling multiple time in FragmentPagerAdaptergetItem() 在 FragmentPagerAdapter 中多次调用
【发布时间】:2012-11-03 22:20:31
【问题描述】:

我正在使用带有片段的 viewpager 开发应用程序。在我的应用程序中,我有一个显示在列表中的项目。之后,当我单击时,我调用了带有适配器的 ViewPager 的 SherlockFragmentActivity。现在的问题是 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);
}

负责设置片段的我的适配器类:-

问题:- 问题是 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);
}

现在请让我知道我错在哪里以及我如何才能获得一个确切的位置以进行进一步处理。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    在getItem()里面,position参数就是需要渲染的位置。它不是用户将看到的当前焦点项目的位置。当前显示视图的左右页面需要在内存中预渲染,以便这些屏幕的动画流畅。要获取当前位置的项目,请使用:

    pager.getCurrentItem();
    

    如果您需要页面的实际位置,您可以实现 onPageChangeListener

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
    }
    

    在 onPageSelected 中的位置将给出页面的准确当前位置。

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多