2017-10-30 83 views
0

ViewPager가 포함 된 두 번째 활동을 호출하는 활동이 있습니다.호출 한 활동의 ​​PagerAdapter에서 항목 수 설정

첫 번째 활동에는 ViewPager에있는 항목의 수를 간접적으로 정의하는 추가 데이터가 포함됩니다.

첫 번째 활동에서 호출 코드는 다음과 같습니다

   myIntent.setClass(getApplicationContext(),ShowAndTellMultiplesActivity.class); 
       myIntent.putExtra("i_split_ways",v_integer_value); 
       startActivity(myIntent); 

i_split_ways 값이 ViewPager에서 만드는 방법을 많은 항목 해결하는 데 사용되는 것입니다 -이 값이>이 다음 카운트가해야 본질적 경우 I i_split_ways -1 선언하고 그> 5 인 경우, 항목의 수가 수신 활동 5.

이어야

static int i_split_ways = 2; 

활동 클래스 선언 직후.

그런 다음 활동의 onCreate 메소드에서 활동 호출의 추가 데이터 값을 다음과 같이 지정합니다.

Intent intent = getIntent(); 

    i_split_ways = intent.getExtras().getInt("i_split_ways",1); 

마지막으로 PagerAdapter 클래스의 getCount() 함수에서 나는 다음과 같이 표시 할 항목 수를 계산합니다.

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     return PlaceholderFragment.newInstance(position + 1); 
    } 

    @Override 
    public int getCount() { 
     if (i_split_ways > 5) i_split_ways = 5 ; 
     if (i_split_ways <= 2) i_split_ways = 2; 
     return i_split_ways; 
    } 

여기 논리는 약간의 작업이 필요하지만 여기의 문제와 관련이 없습니다.

문제는 i_split_ways가 3이 아닌 다른 작업 일 때 두 번째 활동을 시작하면 예를 들어 The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 2, found: 4이라는 오류가 발생한다는 것입니다.

나는 문제가 아마 내가 어떤 점에서

 mSectionsPagerAdapter.notifyDataSetChanged(); 

를 호출 할 필요에 관련이 있음을 볼 수 있습니다,하지만 난 그 전화를해야하는 위치 알아낼 수 없습니다 - 또는 무엇을 더 근본적으로 뭔가 문제가 실제로 있다면 나는하려고 애쓴다.

답변

0

기본 데이터가 변경 될 때마다 mSectionsPagerAdapter.notifyDataSetChanged();으로 전화해야합니다. 당신은 당신이되지 않습니다 viewpager에 어댑터를 설정하기 전에 i_split_ways 변수를 변경한다면

@Override 
protected void onCreate(Bundle savedInstance) { 
    // calling super and setting content view 

    mSectionsViewPager.setAdapter(mSectionsPagerAdapter); 

    // maybe some more stuff 

    Intent intent = getIntent(); 
    i_split_ways = intent.getExtras().getInt("i_split_ways",1); 
} 

: 당신은 내가 당신이 이런 일을하고있는 것 같은데요 제공 한 정보에 의해 판단

notifyDataSetChanged()으로 전화하십시오. 그래서 이런 식으로 뭔가 보일 것 :

@Override 
protected void onCreate(Bundle savedInstance) { 
    // calling super and setting content view 

    Intent intent = getIntent(); 
    i_split_ways = intent.getExtras().getInt("i_split_ways",1); 
    mSectionsViewPager.setAdapter(mSectionsPagerAdapter); 

    // maybe some more stuff 
} 
+0

아, 그래서'getCount()가'는, setAdapter'의 일환으로 실행을()'.. 그 그건 내 문제를 해결거야 ... 완벽한 의미가 있습니다. –