2013-05-24 2 views
0

Это мой первый раз, когда вы используете вкладки в приложении, и я чувствую, что это будет простое исправление, но я не могу найти правильное решение. У меня есть 5 фрагментов вкладки прямо сейчас, но когда я запускаю все, они содержат один и тот же материал. Я думаю, что проблема с этим методом:Использование нескольких фрагментов вкладки

@Override 
    public Fragment getItem(int position) { 
     Fragment fragment = new MiscFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(MiscFragment.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 
     return fragment; 
    } 

У меня есть фрагмент установить на new MiscFragment(); (который затмение автоматически построен с dummyfragment, когда я создал проект)

И у меня есть:

public static class MiscFragment extends Fragment { 

    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public MiscFragment() { 

    } 
    View rootView; 
    GridView gridView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.misc_fragment, 
       container, false); 

     gridView = (GridView) rootView.findViewById(R.id.miscgridview); 
     gridView.setAdapter(new MiscAdapter(getActivity())); 
     return rootView; 
    } 


} 

public static class OtherFragment extends Fragment{ 

    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public OtherFragment(){ 

    } 
    View rootView; 
    GridView gridView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup contatiner, 
      Bundle savedInstanceState){ 
     rootView = inflater.inflate(R.layout.sb_fragment, 
       contatiner, false); 
     gridView = (GridView) rootView.findViewById(R.id.sbgridview); 
     gridView.setAdapter(new OtherAdapter(getActivity())); 
     return rootView; 
    } 

} 

(Первый метод и оба внутренних класса находятся в моей MainActivity), и похоже, что оба они используют одинаковые "section_number", поэтому оба значения GridView s ссылаются на одно и то же. Оба класса адаптера для каждого фрагмента имеют различное количество элементов в GridView, а второе - и действует так же, как и первое. Любая помощь приветствуется!

ответ

0

Я ненавижу отвечать на свой вопрос, но здесь это:

Проблема была с методом getItem. Она работает следующим образом:

public Fragment getItem(int position) { 
    Fragment fragment1 = new FirstFragment(); 
    Fragment fragment2 = new SecondFragment(); 
    Fragment fragment3 = new ThirdFragment(); 

    if(position == 0){ 
     return fragment1; 
    } 
    else if (position == 1){ 
     return fragment2; 
    } 
    else{ 
     return fragment3; 
    } 
} 

Тогда каждый (Number) Фрагмент() относится к внутренним Фрагмент классов

0

Вы никогда не читаете аргумент section_number во фрагменте.

int section = getArguments().getInt(ARG_SECTION_NUMBER); 
+0

Ok, что имеет смысл. Поэтому мне нужно изменить метод 'getItem' для включения всех фрагментов или удалить один фрагмент, чтобы я мог использовать его для всех. И оттуда используйте 'int section' в каждом из моих внутренних классов? –

Смежные вопросы