2016-09-08 2 views
0

두 가지 활동이 있습니다. 활동 A와 활동 BViewPager에서 현재 항목 설정> 0 두 조각의 인스턴스 만들기

활동 A는 -리스트 뷰를

활동 B를 가지고 - FragmentStatePagerAdapter

와 ViewPage

을 가지고 때마다 목록보기의 모든 항목에 사용자가 클릭. 클릭 한 항목의 색인을 전달하는 활동 B가 시작됩니다. 액티비티 B에서는 뷰 페이지에서 어댑터를 설정하고 액티비티 A에서 클릭 한 항목의 인덱스를 currentItem으로 설정한다.

문제는 뷰 페이지가 처음으로 0 번째 항목에 대한 프래그먼트를 생성하고 그 이후에 목. 그 여분의 항목이 생성되기를 원하지 않습니다. 어떤 해결책? 코드의

부분 :

ViewPager vp = (ViewPager) findViewById(R.id.pager); 
ViewPagerAdapter pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), cursor); 
vp.setAdapter(pagerAdapter); 
vp.setCurrentItem(index); 

private class ViewPagerAdapter extends FragmentStatePagerAdapter { 

     private Cursor cursor; 

     public ViewPagerAdapter(FragmentManager fragmentManager, Cursor cursor) { 
      super(fragmentManager); 
      this.cursor = cursor; 
     } 

     @Override 
     public Fragment getItem(int index) { 
       return new Fragment(index); 
     } 

     @Override 
     public int getCount() { 
      return cursor.getCount(); 
     } 

} 

업데이트 : 나는 ViewPage 현재 조각의 왼쪽과 오른쪽을 생성 알고있다. 하지만 내 경우에는 setCurrentItem을 10으로 설정하면 9th 및 11th 외에도 0th가 생성됩니다. vp.setAdapter (pagerAdapter)를 호출 한 직후에 0 번째 항목이 생성되고 다음 줄에는 item 항목으로 이동할 때의 currentItem을 설정합니다. 문제는 스크롤하는 문제가 아닙니다. 문제는 그것이 0 번째를 만들어 내고 그것을 해결하는 방법입니다.

+0

이 색인을 확인 적절한인지 –

+0

지수는 적절한이다. 내 색인이 5면 5 번째 항목이 0이 아니라는 것을 알 수 있습니다.문제는 두 조각의 인스턴스를 모두 생성하는 것입니다. –

+0

나는이 길을 건너 올 방법이 없다고 생각한다. 나는 대안이있다. 얼마나 많은 파편이 있습니까? –

답변

-1

내가 당신이 원하는 행동으로 인한 ViewPager 구현 불가능하다 생각이

private class ViewPagerAdapter extends FragmentStatePagerAdapter { 

     private Cursor cursor; 
     private int index; 

     public ViewPagerAdapter(FragmentManager fragmentManager, Cursor cursor,int indext) { 
      super(fragmentManager); 
      this.cursor = cursor; 

      this.index=indext; 
     } 

     @Override 
     public Fragment getItem(int index) { 
      //method to find fragment at that index 
      return fragment(); 
     } 

     @Override 
     public int getCount() { 
      return cursor.getCount(); 
     } 

    } 
} 
1

처럼하려고합니다. ViewPager은 "스크롤링"동작 및 현재 이웃에 대한 지식과 캐시에 의존합니다. 그래서 setCurrentItem 내부 : onLayout에서

mCurItem = item; 
if (dispatchSelected) { 
    dispatchOnPageSelected(item); 
} 
requestLayout(); 

그리고 마지막으로 :

scrollToItem(mCurItem, false, 0, false); 

ViewPager은 현재 페이지 (총 3 개 조각)의 이웃을 만듭니다

setCurrentItemInternal(item, !mFirstLayout, false); 

그리고이 방법 내부

. 당신은 두 조각의 창조를 줄일 수

private static final String ARG_INDEX = "itemPosition"; 
private int mPageIndex; 

public static BlankFragment newInstance(int index) { 
    BlankFragment fragment = new BlankFragment(); 
    Bundle args = new Bundle(); 
    args.putInt(ARG_INDEX, index); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mPageIndex = getArguments().getInt(ARG_INDEX); 
    } 
} 

을 그리고 여기에 같이 사용합니다 :

mViewPager.setCurrentItem(id, false); //disable smooth scroll 

는 또한처럼 조각을 변경

@Override 
public Fragment getItem(int position) { 
    return BlankFragment.newInstance(position); 
} 

당신은에 의존 할 수 fragment constructor을 사용하여 매개 변수를 단편화하여 재 작성할 수 있습니다.

+0

ViewPage는 현재 조각의 왼쪽과 오른쪽을 만듭니다. 하지만 내 경우에는 setCurrentItem을 10으로 설정하면 9th 및 11th 외에도 0th가 생성됩니다. 문제는 스크롤하는 문제가 아닙니다. 문제는 그것이 0 번째를 만들어 내고 그것을 해결하는 방법입니다. –

+0

이상한, 테스트 프로젝트를 만들었으며 현재 항목의 이웃들 만 만들어졌습니다. 나는 당신의 문제가 무엇인지 아는 것 같아. – j2ko

+0

나는 조각을 같은 방법으로 만들고있다. 위 코드는 예제 코드입니다. 귀하의 샘플에서 그냥 조각에 대한 또는 setUserHintVisible에서 인덱스에 대한 로그를 추가하십시오 –

0

어댑터에서 수표를 추가하고 더미 조각을 반환하여 해결했습니다.

샘플 코드 :

private class ViewPagerAdapter extends FragmentStatePagerAdapter { 

     private int currentItemIndex,count; 
     private boolean currentItemCreated; 

     public ViewPagerAdapter(FragmentManager fragmentManager, int currentItemIndex,int count) { 
      super(fragmentManager); 
     this.count= count; 
      this.currentItemIndex = currentItemIndex; 
     } 


     @Override 
     public Fragment getItem(int index) { 
      if (index == currentItemIndex) { 
       currentItemCreated = true; 
      } 
      if (currentItemCreated) { 

       return new YourFragment(); 
      } else { 
       return new Fragment(); 
      } 
     } 


     @Override 
     public int getCount() { 
      return count; 
     } 

    } 
관련 문제