2012-11-03 5 views
1

viewPage와 함께 응용 프로그램을 개발하고 있습니다. 내 응용 프로그램에서 List.After에서 보여주는 항목이 있습니다. 클릭하면 나는 Adapter.Now와 함께 ViewPager를 호출하는 SherlockFragmentActivity를 호출합니다. 문제는 내가 플립 때 FragmentPagerAdapter에서의 getItem은 하나의 time.Also 여러 위치를 줄입니다 되돌아 가기 다음도 giveing ​​잘못 position.Here는FragmentPagerAdapter에서 여러 시간 호출()

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

지금 친절하게 내가 더 공정에 대한 하나의 정확한 위치를 얻을 수있는 방법 &을 잘못 어딘지 알려주세요.

답변

5

getItem() 내에서 position 매개 변수는 렌더링이 필요한 위치입니다. 사용자가 볼 수있는 현재 포커스가있는 항목의 위치가 아닙니다. 현재 표시된보기의 왼쪽과 오른쪽에있는 페이지는 메모리에 미리 렌더링되어 해당 화면에 대한 애니메이션이 부드럽게 처리되어야합니다. 현재 위치 사용에있는 항목을 효율적으로 활용하려면 다음

pager.getCurrentItem(); 

을 당신이 onPageChangeListener 페이지의 정확한 현재 위치를 줄 것이다 onPageSelected에서

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

위치를 구현할 수있는 페이지의 실제 위치가 필요합니다.

+0

감사합니다. Marcin 님의 답변입니다. – yokees