호환성 라이브러리에서 ViewPager를 사용하고 있습니다. 페이지를 통과 할 수있는 여러보기를 표시하는 데 성공했습니다.
그러나 새로운 View 집합으로 ViewPager를 업데이트하는 방법을 알아내는 데 어려움을 겪고 있습니다.
나는 호출과 같은 모든 종류의 것들을 시도했습니다 mAdapter.notifyDataSetChanged()
, mViewPager.invalidate()
심지어 새로운 어댑터 나 데이터의 새로운 목록을 사용할 때마다 생성.
아무것도 도움이되지 않았습니다. 텍스트보기는 원본 데이터와 변경되지 않습니다.
업데이트 : 약간의 테스트 프로젝트를 만들었고 뷰를 거의 업데이트 할 수있었습니다. 아래 수업을 붙여 넣을 게요.
그러나 업데이트되지 않는 것은 두 번째보기이며 'B'는 남아 있으며 업데이트 버튼을 누른 후 'Y'가 표시되어야합니다.
public class ViewPagerBugActivity extends Activity {
private ViewPager myViewPager;
private List<String> data;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
data = new ArrayList<String>();
data.add("A");
data.add("B");
data.add("C");
myViewPager = (ViewPager) findViewById(R.id.my_view_pager);
myViewPager.setAdapter(new MyViewPagerAdapter(this, data));
Button updateButton = (Button) findViewById(R.id.update_button);
updateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
updateViewPager();
}
});
}
private void updateViewPager() {
data.clear();
data.add("X");
data.add("Y");
data.add("Z");
myViewPager.getAdapter().notifyDataSetChanged();
}
private class MyViewPagerAdapter extends PagerAdapter {
private List<String> data;
private Context ctx;
public MyViewPagerAdapter(Context ctx, List<String> data) {
this.ctx = ctx;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object instantiateItem(View collection, int position) {
TextView view = new TextView(ctx);
view.setText(data.get(position));
((ViewPager)collection).addView(view);
return view;
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public void startUpdate(View arg0) {
}
@Override
public void finishUpdate(View arg0) {
}
}
}