Fragment в Tab

Интерфейс, диалоги, темы, стили, меню
Ответить
Zammm
Сообщения: 69
Зарегистрирован: 05 окт 2014, 11:31

Fragment в Tab

Сообщение Zammm » 24 ноя 2014, 22:06

Господа, перекопал что-то "интернет-литературу" и не смог для себя, с трудом пока разбирающегося, надыбать информацию о том, как же всё-таки добавлять табы с фрагментами. Положим на стартандройде есть описание, как работать с табами в уроке 108... Но нет вызовов конкретных уже существующих фрагментов... Выглядит это так:
  • Tab tab = bar.newTab();
    tab.setText("tab1");
    tab.setTabListener(this);
    bar.addTab(tab);

    tab = bar.newTab();
    tab.setText("tab2");
    tab.setTabListener(this);
    bar.addTab(tab);
Очень прошу, если не трудно, подсказать - что должно быть в layout файле main_activity и как "объединить" табы и классы фрагментов в коде главной страницы?

p.s. Мучался до этого с TabActivity и abHost и вдруг неожиданно для себя выяснил, что сей способ добавления табов достаточно устаревший, а загружая в табы activity вместо fragment не могу организовать некоторые вещи.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Fragment в Tab

Сообщение Foenix » 24 ноя 2014, 22:39

та бросай, это устарело все. Теперь в экшенбаре табы делать надо.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

finberg
Сообщения: 51
Зарегистрирован: 11 мар 2013, 14:20

Re: Fragment в Tab

Сообщение finberg » 25 ноя 2014, 13:04

В эклипсе можно создать проект с табами. Посмотрите сгенерированной код и все станет ясно.....

Zammm
Сообщения: 69
Зарегистрирован: 05 окт 2014, 11:31

Re: Fragment в Tab

Сообщение Zammm » 29 ноя 2014, 11:26

finberg, сделал как Вы предложили, во многом разобрался, особенно что касается viewpager, добавления и переключения... Но! Всё-равно в этом примере есть только один фрагмент, между которым эти табы и переключаются - между одним и тем же фрагментом... А как сделать так, чтобы в табах были разные фрагменты до меня ну вот совсем никак не доходит, совсем знаний не хватает... В интернете в литературе так и не смог найти этого, может кто-нибудь всё-таки подскажет как разным табам присвоить разные фрагменты?

Вот кусочек стандартного кода, немного переделанного мной (возможно и неправильно):

Код: Выделить всё

@Override
	public void onTabSelected(ActionBar.Tab tab,
			FragmentTransaction fragmentTransaction) {
		// When the given tab is selected, switch to the corresponding page in
		// the ViewPager.
		mViewPager.setCurrentItem(tab.getPosition());
	}

	@Override
	public void onTabUnselected(ActionBar.Tab tab,
			FragmentTransaction fragmentTransaction) {
	}

	@Override
	public void onTabReselected(ActionBar.Tab tab,
			FragmentTransaction fragmentTransaction) {
	}

	/**
	 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
	 * one of the sections/tabs/pages.
	 */
	public class SectionsPagerAdapter extends FragmentPagerAdapter {

		public SectionsPagerAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int position) {
			// getItem is called to instantiate the fragment for the given page.
			// Return a PlaceholderFragment (defined as a static inner class
			// below).
	        return PlaceholderFragment.newInstance(position + 1);
	        
		}

		@Override
		public int getCount() {
			// Show 2 total pages.
			return 2;
		}

		@Override
		public CharSequence getPageTitle(int position) {
			Locale l = Locale.getDefault();
			switch (position) {
			case 0:
				return getString(R.string.title_section1).toUpperCase(l);
			case 1:
				return getString(R.string.title_section2).toUpperCase(l);
			
			}
			return null;
		}
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {
		/**
		 * The fragment argument representing the section number for this
		 * fragment.
		 */
		private static final String ARG_SECTION_NUMBER = "section_number";

		/**
		 * Returns a new instance of this fragment for the given section number.
		 */
		public static PlaceholderFragment newInstance(int sectionNumber) {
			PlaceholderFragment fragment = new PlaceholderFragment();
			Bundle args = new Bundle();
			args.putInt(ARG_SECTION_NUMBER, sectionNumber);
			fragment.setArguments(args);
			return fragment;
		}

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView1 = inflater.inflate(R.layout.fragment_main, container,
					false);
			return rootView1;
		}
	}
	
	public static class PlaceholderFragment1 extends Fragment {
		/**
		 * The fragment argument representing the section number for this
		 * fragment.
		 */
		private static final String ARG_SECTION_NUMBER = "section_number";

		/**
		 * Returns a new instance of this fragment for the given section number.
		 */
		public static PlaceholderFragment1 newInstance(int sectionNumber) {
			PlaceholderFragment1 fragment = new PlaceholderFragment1();
			Bundle args = new Bundle();
			args.putInt(ARG_SECTION_NUMBER, sectionNumber);
			fragment.setArguments(args);
			return fragment;
		}

		public PlaceholderFragment1() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView2 = inflater.inflate(R.layout.fragment, container,
					false);
			return rootView2;
		}
	}

}
Как сделать здесь так, чтобы отображался во второй вкладке другой фрагмент я так и не понял...

finberg
Сообщения: 51
Зарегистрирован: 11 мар 2013, 14:20

Re: Fragment в Tab

Сообщение finberg » 30 ноя 2014, 13:46

Адаптер ViewPager-a, метод public Fragment getItem(int position).

Делаете switch и в зависимости от позиции создаете и возвращаете нужный вам фрагмент.

Zammm
Сообщения: 69
Зарегистрирован: 05 окт 2014, 11:31

Re: Fragment в Tab

Сообщение Zammm » 30 ноя 2014, 23:02

Спасибо большое, всё оказалось намного проще, чем я думал...)

Ответить