ViewPager에서 컨텐츠를 업데이트 할 수 없습니다.
FragmentPagerAdapter 클래스에서 instantiateItem () 및 getItem () 메소드의 올바른 사용법은 무엇입니까?
getItem () 만 사용하여 조각을 인스턴스화하고 반환했습니다.
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
이것은 잘 작동했습니다. 내용을 변경할 수 없다는 점만 빼면
그래서 이것을 찾았습니다 : ViewPager PagerAdapter가 View를 업데이트하지 않습니다
"제 접근법은 instantiateItem () 메소드의 인스턴스화 된 뷰에 대해 setTag () 메소드를 사용하는 것입니다."
이제 instantiateItem ()을 구현하고 싶습니다. 그러나 무엇을 반환 해야하는지 (유형은 Object) 모르겠으며 getItem (int position)과의 관계는 무엇입니까?
나는 참조를 읽었다 :
공개 추상 조각 getItem (int position)
지정된 위치와 관련된 조각을 반환합니다.
공용 객체 instantiateItem (ViewGroup 컨테이너, int 위치)
주어진 위치에 대한 페이지를 작성하십시오. 어댑터는 여기에 제공된 컨테이너에보기를 추가해야하지만 finishUpdate (ViewGroup)에서 리턴 될 때만 수행해야합니다. 매개 변수
컨테이너 페이지가 표시 될 포함보기입니다. position 인스턴스화 할 페이지 위치.
보고
새 페이지를 나타내는 Object를 리턴합니다. 이것은 뷰일 필요는 없지만 페이지의 다른 컨테이너 일 수 있습니다.
그러나 나는 여전히 그것을 얻지 못한다.
여기 내 코드가 있습니다. 지원 패키지 v4를 사용하고 있습니다.
ViewPagerTest
public class ViewPagerTest extends FragmentActivity {
private ViewPager pager;
private MyFragmentAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager1);
pager = (ViewPager)findViewById(R.id.slider);
String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};
adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
pager.setAdapter(adapter);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
reload();
}
});
}
private void reload() {
String[] data = {"changed1", "changed2", "changed3", "changed4", "changed5", "changed6"};
//adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
adapter.setData(data);
adapter.notifyDataSetChanged();
pager.invalidate();
//pager.setCurrentItem(0);
}
}
MyFragmentAdapter
class MyFragmentAdapter extends FragmentPagerAdapter {
private int slideCount;
private Context context;
private String[] data;
public MyFragmentAdapter(FragmentManager fm, int slideCount, Context context, String[] data) {
super(fm);
this.slideCount = slideCount;
this.context = context;
this.data = data;
}
@Override
public Fragment getItem(int position) {
return new MyFragment(data[position], context);
}
@Override
public int getCount() {
return slideCount;
}
public void setData(String[] data) {
this.data = data;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
MyFragment
public final class MyFragment extends Fragment {
private String text;
public MyFragment(String text, Context context) {
this.text = text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.slide, null);
((TextView)view.findViewById(R.id.text)).setText(text);
return view;
}
}
비슷한 문제가있는 사람도 있습니다 .http : //www.mail-archive.com/android-developers@googlegroups.com/msg200477.html