2012-06-16 2 views
1

내 문제는 : 새로운 데이터를 얻으면 사용자 정의 어댑터를 사용하는 뷰 페이지가 뷰를 업데이트하지 않는다는 것입니다. 많은 프로그래머가 동일한 버그를 발견했기 때문에 많은 제안을 시도했지만 나에게 전혀 도움이되지 못했습니다. 피곤 했어. 한 번 더, 내 소스를 읽고 왜 내가보기 pleaseee 업데이 트와 함께 실패 이해할 수 있도록 도와주세요! 가 여기 내 FragmentAdapter입니다 :안드로이드 : FragmentAdapter 및 pageview가 뷰를 업데이트하지 않습니다.

private class SwipeyTabsPagerAdapter extends FragmentPagerAdapter implements 
     SwipeyTabsAdapter { 

    private final Context mContext; 
    private String[] datas; 

    public SwipeyTabsPagerAdapter(Context context, FragmentManager fm, String[] ds) { 
     super(fm); 
     this.mContext = context; 
     datas=ds; 
    } 

    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Log.e("new item:", datas[position]); 
     return SwipeyTabFragment.newInstance(datas[position]); 
    } 

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

    public TextView getTab(final int position, SwipeyTabs root) { 
     TextView view = (TextView) LayoutInflater.from(mContext).inflate(
       R.layout.swipey_tab_indicator, root, false); 
     view.setText(datas[position]); 
     view.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       mViewPager.setCurrentItem(position); 
      } 
     }); 

     return view; 
    } 

} 

여기에 내가 어댑터 설정 곳이다 : 로그 캣으로

SwipeyTabsPagerAdapter adapter = new SwipeyTabsPagerAdapter(getApplicationContext(), getSupportFragmentManager(),dicts); 
      mViewPager.setAdapter(adapter); 
      mTabs.setAdapter(adapter); 
      mViewPager.getAdapter().notifyDataSetChanged(); 

, 명확하게 볼 수 있습니다 만 처음, 인 newItem 처리 할 수 ​​있으므로 뷰는 갱신 할 수 없다 .

답변

0

mTabs에서도 notifyDataSetChanged()를 호출하십시오. SwipeyTabsView 클래스에서이 메소드의 구현을 참조하십시오

public void notifyDatasetChanged() { 
    if (mPager != null && mAdapter != null) { 
     initTabs(); 
     measure(mWidthMeasureSpec, mHeightMeasureSpec); 
     calculateNewPositions(true); 
    } 
} 
1

나는이 문제를 가지고 내가 인터넷에있는 모든 것을 시도하고 작동하지 않았다.

실제 해결책은 FragmentPagerAdapter 대신 FragmentStatePagerAdapter를 사용하는 것입니다. FragmentPagerAdapter는 "불변"(적어도 그 방식으로 동작 함) 인 것처럼 보입니다.

자세한 내용은이 스레드를 참조하십시오 :

Update ViewPager dynamically?

또 다른 작업 솔루션하지만 나쁜 프로그래밍, 모든 (ViewPager, 어댑터)마다 reinstantiate 이전 하나를 제거하고 새로운 하나를 추가하는 것입니다.

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 
:

편집

나는 당신이이 방법을 추가 할 필요가 어댑터에 중요한 무언가를 잊어 버렸습니다

관련 문제