1

FragmentPager を使用してアプリケーションを開発しています。私のアプリケーションでは、List に表示する項目があります。その後、クリックすると、SherlockFragmentActivity が呼び出され、ViewPager を adapter. time.また、バックワードを反転すると、間違った位置も与えられます.ここに私のコードがあります

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回呼び出し、3,4,5の数字を与える4つのアイテムをクリックすると仮定します。

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

どこが間違っているのか、次のプロセスのために正確な位置を 1 つだけ取得するにはどうすればよいか教えてください。

4

1 に答える 1

5

getItem() 内の position パラメータは、レンダリングが必要な位置です。ユーザーに表示されるのは、現在フォーカスされているアイテムの位置ではありません。現在表示されているビューの左右のページは、それらの画面へのアニメーションがスムーズになるようにメモリ内で事前にレンダリングする必要があります。現在の位置でアイテムを取得するには、次を使用します。

pager.getCurrentItem();

ページの実際の位置が必要な場合は、 onPageChangeListener を実装できます

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

onPageSelected の位置は、ページの正確な現在の位置を示します。

于 2012-11-03T23:24:20.590 に答える