У меня есть приложение с tabhost и viewpager. У меня есть одна вкладка, фрагмент фиксированный. Мне нужно добавить вкладку, фрагменты динамически по щелчку переключателя в радиогруппе из первого фрагмента.android viewpager с фрагментами с использованием FragmentPageAdapter dynamic add, remove
MyPagerAdapter класс:
import java.util.ArrayList;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
public class MyViewPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments = new ArrayList<Fragment>();
FragmentManager fm;
public List<Fragment> getFragments() {
return fragments;
}
public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
}
public MyViewPageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fm = fm;
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
public void addFragment(Fragment fragment) {
this.fragments.add(fragment);
notifyDataSetChanged();
}
public void removeFragments() {
try {
List<Fragment> newList = new ArrayList<Fragment>();
Fragment general = fragments.get(0);
newList.add(general);
this.fragments.clear();
this.fragments = new ArrayList<Fragment>();
this.fragments = newList;
notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
public void removeItemFromFrament(ViewGroup container, int position, Object object) {
try {
try {
container.removeViewAt(position);
((ViewPager) container).setCurrentItem(position - 1);
} catch (Exception e) {
e.printStackTrace();
}
notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
}
MyPagerFragment класс:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MyViewPageFragment extends Fragment {
private static View mView;
public static final MyViewPageFragment newInstance(int layoutId) {
MyViewPageFragment f = new MyViewPageFragment();
Bundle b = new Bundle();
b.putInt("layout", layoutId);
f.setArguments(b);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
int layout = getArguments().getInt("layout");
try {
mView = inflater.inflate(layout, container, false);
} catch (Exception e) {
}
return mView;
}
}
Im пытается добавить фрагменты к адаптеру, как это:
Fragment fragment = MyViewPageFragment.newInstance(R.layout.tab_content_layout);
((MyViewPageAdapter) mViewPager.getAdapter()).addFragment(fragment);
Моя проблема: В первый раз , страницы добавляются должным образом , после удаления всех представлений (кроме первого фрагмента) и попытки добавить другой набор вкладок, фрагменты не видны, а getSupportFragmentmanager.getFragments(). size() неверен.
Я попытался удалить точку из ViewPager с менеджером фрагмента
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
После добавления вкладки, фрагменты на pagescrolled в getSupportFragmentManager(). GetFragments.get (arg0) возвращает нуль.
Примечание: я должен поддерживать состояние первого фрагмента, так и FragmentStatePagerAdapter getItemPosition возвращение POSITION_NONE не является приемлемым.
Вы думаете, что это.fragments.clear(); this.fragments = new ArrayList(); this.fragments = newList; 'правильно? Что вам здесь нужно? –
SilentKnight
Да, я должен поддерживать первый фрагмент, потому что он является статическим. Поэтому я получаю первый и очищаю все фрагменты и добавляю первый фрагмент в список снова – User0802
можно сослаться http://blog.csdn.net/z13759561330/article/details/40737381 –