ViewPager içindeki içeriği güncelleyemiyorum.
FragmentPagerAdapter sınıfında instantiateItem () ve getItem () yöntemlerinin doğru kullanımı nedir?
Parçalarımı başlatmak ve döndürmek için yalnızca getItem () kullanıyordum:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Bu iyi çalıştı. Ancak içeriği değiştiremiyorum.
Bu yüzden buldum: ViewPager PagerAdapter Görünümü güncellemiyor
"Benim yaklaşımım instantiateItem () yöntemindeki herhangi bir örneklenmiş görünüm için setTag () yöntemini kullanmaktır"
Şimdi bunu yapmak için instantiateItem () uygulamak istiyorum. Ama ne dönmek zorundayım (türü Object) ve getItem (int pozisyon) ile ilişkisi nedir?
Referansı okudum :
public abstract Fragment getItem (int konum)
Belirtilen bir konumla ilişkili Parçayı döndürün.
public Object instantiateItem (ViewGroup kapsayıcısı, int konumu)
Verilen konum için sayfa oluşturun. Bağdaştırıcı, görünümü burada verilen kapsayıcıya eklemekten sorumludur, ancak bunun yalnızca finishUpdate'den (ViewGroup) döndüğü zaman yapılmasını sağlamalıdır. Parametreler
container Sayfanın gösterileceği İçeren Görünüm. konum Örneklenecek sayfa konumu.
İadeler
Yeni sayfayı temsil eden bir Nesne döndürür. Bunun bir Görünüm olması gerekmez, ancak sayfanın başka bir kabı olabilir.
ama hala anlamıyorum.
İşte kodum. Destek paketi v4 kullanıyorum.
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;
}
}
İşte benzer bir sorunu olan biri, cevap yok http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html