Страница 1 из 1

помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 04:17
werter
никак не получается разобраться , пробую

Fragment itemFragment = new NewFragment();

getFragmentManager()
.beginTransaction()
.replace(R.id.second_fragment, itemFragment)
.addToBackStack(null)
.commit();

идея заключается в том , что на нажатие кнопки в меню - показать на месте ViewPager другой фрагмент.

Re: помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 09:05
Mikhail_dev
Ну кот вроде верный, хоть и некрасивый. В чем ошибка?

Re: помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 11:09
KamiSempai
Ни чего подобного, код абсолютно не верен.
При указании ID в методе replace, нужно указывать ID контейнера, таких как LinearLayout или FrameLayout.
Фактически, фрагмент не заменяет указанный View а помещается в него.

Вам нужно сделать 2 фрагмента, один с ViewPager, другой ItemFragment.

Для того, что бы сделать правильный фрагмент с ViewPager нужно использовать NestedFragments: http://developer.android.com/about/vers ... dFragments

Re: помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 12:29
Mikhail_dev
А, точно, не заметил. Думал это id контейнера.
код абсолютно не верен
В чем его неверность? В том что id не контейнера указан? Что-нибудь еще?
Для того, что бы сделать правильный фрагмент с ViewPager нужно использовать NestedFragments
Вопрос не стоит поменять фрагменты внутри ViewPager, вопрос стоит поменять один фрагмент на другой по сути. Тут и NestedFragments не нужны.

Re: помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 13:09
KamiSempai
Mikhail_dev писал(а):Вопрос не стоит поменять фрагменты внутри ViewPager, вопрос стоит поменять один фрагмент на другой по сути. Тут и NestedFragments не нужны.
Если фрагмент с ViewPager использует фрагменты в качестве страниц, то для адаптера ViewPager нужно использовать фрагмент менеджер полученный через getChildFragmentManager(). Вот к чему я клоню.

Re: помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 13:16
Mikhail_dev
я больше чем уверен, что если бы была вложенность, то вылезла ошибка при вызове getFragmentManager(), так что тут не вложенные фрагменты, а просто замена фрагментов в контейнере в рамках активности

Re: помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 13:26
KamiSempai
Mikhail_dev писал(а):я больше чем уверен, что если бы была вложенность, то вылезла ошибка при вызове getFragmentManager(), так что тут не вложенные фрагменты, а просто замена фрагментов в контейнере в рамках активности
Она не вылезла по тому, что сейчас, скорее всего, ViewPager не на фрагменте , а на Activity.

Re: помогите заменить ViewPager на Fragment

Добавлено: 16 май 2014, 20:25
werter
спасибо большое за ответы , попробую разобраться

Re: помогите заменить ViewPager на Fragment

Добавлено: 22 май 2014, 22:58
werter
так и не выходит у меня каменный цветок (
помогите разобраться плз. по нажатию - получаю пустой экран , никаких ошибок не выдает (

main.xml

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/first_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <android.support.v4.view.ViewPager
        android:id="@+id/second_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/first_container" >
    </android.support.v4.view.ViewPager>

</RelativeLayout>
в основном FragmentActivity добавляю фрагмент и ViewPager

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

// Adding first fragment

		FragmentManager fm = getSupportFragmentManager();
		Fragment fragment = fm.findFragmentById(R.id.first_container);
		if (fragment == null) {
			fragment = new NavigationButtons();
			fm.beginTransaction().add(R.id.first_container, fragment).commit();

	     /// Adding second fragment

			pager = (ViewPager) findViewById(R.id.second_container);
			pagerAdapter = new MyFragmentPagerAdapter(
					getSupportFragmentManager());
			pager.setAdapter(pagerAdapter); 
потом пытаюсь сделать , чтобы по нажатию кнопки вместо ViewPager появился новый фрагмент

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

onClick:

Fragment itemFragment = new NewFragment();

				getFragmentManager()
				.beginTransaction()
				.replace(R.id.second_container, itemFragment)
				.addToBackStack(null)
				.commit();
new_fragment.xml

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragmentId"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/testedText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello "
        android:textColor="@android:color/black"
        android:textSize="24dp" />

</LinearLayout>
NewFragmnet.java

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

public class NewFragment extends Fragment {
	
	 @Override
	  public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState); }
	 
	 @Override
	  public View onCreateView(LayoutInflater inflater, ViewGroup container,
	      Bundle savedInstanceState) {
	    View view = inflater.inflate(R.layout.new_fragment, container, false);
	
	    return view;
	    
	 }

}