Я не можу оновити вміст у ViewPager.
Яке правильне використання методів instantiateItem () та getItem () у класі FragmentPagerAdapter?
Я використовував лише getItem () для створення екземплярів та повернення своїх фрагментів:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Це добре спрацювало. За винятком того, що я не можу змінити вміст.
Тому я виявив це: ViewPager PagerAdapter не оновлює представлення даних
"Мій підхід полягає у використанні методу setTag () для будь-якого представленого перегляду в методі instantiateItem ()"
Тепер я хочу впровадити instantiateItem (), щоб це зробити. Але я не знаю, що мені потрібно повернути (тип Object) і яке відношення до getItem (int position)?
Я читаю посилання :
публічний абстрактний фрагмент getItem (позиція int)
Поверніть фрагмент, пов'язаний із заданою позицією.
public Object instantiateItem (контейнер ViewGroup, позиція int)
Створіть сторінку для заданої позиції. Адаптер несе відповідальність за додавання поданого вигляду до даного тут контейнера, хоча він повинен лише забезпечити це тим часом, коли він повернеться з FinUpdate (ViewGroup). Параметри
контейнер Перегляд, що містить сторінку, в якій буде показана сторінка. Позиція Позиція сторінки, яку потрібно створити.
Повертається
Повертає об’єкт, що представляє нову сторінку. Це не повинно бути переглядом, але це може бути якийсь інший контейнер сторінки.
але я все одно не розумію.
Ось мій код. Я використовую пакет підтримки 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