(Если кому-то понадобится дополнительная информация или лучшее описание, дайте мне знать)
Здравствуйте, я включил viewPagerLibrary отсюда: http://viewpagerindicator.com/#introduction сегодня в моем проекте.
Нет, у меня действительно странная проблема: Если я добавлю сайт или страницу (в следующих нескольких строках назовем ее сайтом) и снова удалю, все в порядке. Но если я попытаюсь добавить другую страницу (это разные страницы Fragements, которые реализуют класс BaseFragment), отображается содержимое первой страницы. То же самое происходит, если я добавляю несколько страниц и удаляю одну между ними. Страница, которая была после удаленной страницы, теперь показывает содержимое удаленных страниц.
Пример этой ошибки: Теперь проблема есть. Если я добавлю FragmentA после этого FragmentB, тогда я удалю FragmentA, FragmentB получит представление / содержимое FragmentA.Странно то, что объект правильный (поэтому адаптер возвращает правильный объект), и заголовок также правильный.
В основном я создаю свой пейджер, индикатор и адаптер следующим образом:
Cfg.mAdapter = new FragmentAdapter(getSupportFragmentManager());
Cfg.mPager = (ViewPager)findViewById(R.id.pager);
Cfg.mPager.setAdapter(Cfg.mAdapter);
Cfg.mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
Cfg.mIndicator.setViewPager(Cfg.mPager);
//We set this on the indicator, NOT the pager
Cfg.mIndicator.setOnPageChangeListener(TabHelper.onPageChangeListener);
(Cfg - это статический файл для хранения этих вещей для использования)
Мой BaseFragment выглядит следующим образом:
public class BaseFragment extends Fragment{
public static int FILE_FRAGMENT = 0;
public static int FTP_FRAGMENT = 1;
public static int ADDFTP_FRAGMENT = 2;
public static int PREVIEW_FRAGMENT = 3;
public static int CSS_FRAGMENT = 4;
public static int BOOKS_FRAGMENT = 5;
public static int SNIPPETS_FRAGMENT = 6;
//private int id;
private int typ;
private String title;
public int getTyp() {
return typ;
}
public void setTyp(int typ) {
this.typ = typ;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Один из Фрагменты выглядят так (я думаю, что другие фрагменты не имеют значения):
public class FtpFragment extends BaseFragment {
private static RowLayout rowLayout_view;
public FtpFragment() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init_data();
}
public static void init_data()
{
//Remove child for update
rowLayout_view.removeAllViews();
List ftps = FtpStorage.getInstance().getFtps();
if (ftps != null) {
for (FtpData f : ftps) {
View inflatedView;
inflatedView = View.inflate(Cfg.ctx, R.layout.ftp, null);
inflatedView.setOnClickListener(button_ftp_listener);
inflatedView.setOnLongClickListener(button_ftp_longClickListener);
inflatedView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, Converter.convertFromDPtoPixel(160.0f)));
inflatedView.setTag(f);
inflatedView.findViewById(R.id.book_imageview).setBackgroundDrawable(
Cfg.ctx.getResources().getDrawable(R.drawable.nopreview));
((TextView) inflatedView.findViewById(R.id.book_textview)).setText(f.nickname);
rowLayout_view.addView(inflatedView);
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_ftp, container, false);
rowLayout_view = (RowLayout) v.findViewById(R.id.rowLayout_ftps);
return v;
}
@Override
public String getTitle() {
return "FTPs";
}
@Override
public int getTyp() {
return BaseFragment.FTP_FRAGMENT;
}
@Override
public void setTyp(int typ) {
super.setTyp(typ);
}
}
Чтобы удалить или добавить страницу, я называю это:
public static void addNewTab(BaseFragment fragment)
{
Cfg.mAdapter.addItem(fragment);
Cfg.mPager.setCurrentItem(Cfg.mAdapter.getCount());
Cfg.mIndicator.notifyDataSetChanged();
}
public static void deleteActTab()
{
Cfg.mAdapter.removeItem(Cfg.mAdapter.getActPage());
Cfg.mIndicator.notifyDataSetChanged();
}
И это адаптер:
public class FragmentAdapter extends FragmentPagerAdapter implements TitleProvider{
public List fragments = new LinkedList();
private int actPage;
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
public void setActPage(int actPage) {
Lg.d("setActPage: " + actPage + " : " + fragments.get(actPage).toString());
this.actPage = actPage;
}
public void addItem(BaseFragment fragment)
{
Lg.d("addItem: " + fragment.toString());
fragments.add(fragment);
}
public void removeItem(int index)
{
if(index < getCount()){
Lg.d("RemoveItem: " + index + " : " + fragments.get(index).toString());
fragments.remove(index);
}
}
public BaseFragment getActFragment()
{
return getItem(getActPage());
}
public int getActPage() {
return actPage;
}
@Override
public BaseFragment getItem(int position) {
if(position < getCount())
{
Lg.v("getItem: " + fragments.get(position));
return fragments.get(position);
}
else
return null;
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public String getTitle(int position) {
Lg.v("Get Title: " + fragments.get(position).getTitle());
return fragments.get(position).getTitle();
}
}
Да, я надеюсь, что кто-то может помочь меня.
Если я что-то забыл, дайте мне знать.
Заранее спасибо, Майк