Saya tidak dapat memperbarui konten di ViewPager.
Apakah penggunaan metode yang benar instantiateItem () dan getItem () di kelas FragmentPagerAdapter?
Saya hanya menggunakan getItem () untuk membuat instance dan mengembalikan fragmen saya:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Ini bekerja dengan baik. Kecuali saya tidak bisa mengubah konten.
Jadi saya menemukan ini: ViewPager PagerAdapter tidak memperbarui View
"Pendekatan saya adalah menggunakan metode setTag () untuk tampilan instantiated apa pun dalam metode instantiateItem ()"
Sekarang saya ingin mengimplementasikan instantiateItem () untuk melakukan itu. Tetapi saya tidak tahu apa yang harus saya kembalikan (tipenya adalah Object) dan apa hubungannya dengan getItem (posisi int)?
Saya membaca referensi :
public abstrak Fragmen getItem (posisi int)
Kembalikan Fragmen yang terkait dengan posisi yang ditentukan.
InstantiateItem objek publik (wadah ViewGroup, posisi int)
Buat halaman untuk posisi yang diberikan. Adaptor bertanggung jawab untuk menambahkan tampilan ke wadah yang diberikan di sini, meskipun itu hanya harus memastikan ini dilakukan pada saat ia kembali dari finishUpdate (ViewGroup). Parameter
container Tampilan yang berisi halaman yang akan ditampilkan. posisi Posisi halaman yang akan dipakai.
Kembali
Mengembalikan Objek yang mewakili halaman baru. Ini tidak perlu menjadi Tampilan, tetapi bisa berupa wadah halaman lainnya.
tapi saya masih belum mengerti.
Ini kode saya. Saya menggunakan paket dukungan 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;
}
}
Di sini ada juga seseorang dengan masalah yang sama, tidak ada jawaban http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html