Страница 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;
}
}