Сегодня я хочу рассказать как сделать свайп активностями через такую прекрасную вещь как ViewPager. В интернете полно разных статей на эту тему, но не одна не затрагивает как сделать так что бы например у вас есть три активности и их нужно вывести отдельно но при этом что бы их можно было листать как книжку вправо влево. Это все довольно просто получается, достаточно использовать фрагменты и класс FragmentActivity и все становится красиво и просто, и так давайте начнем.
Прежде всего нам нужно создать проект, а дальше в созданном новом классе MainActiivity сносим все к чертям до имени класса и вставляем следующий код:
MainActivity.java
Так же нам нужно в намшем файле activity_main.xml нужно вместо стандартного текствью создать елемент фрагмента что бы можно было его использовать как фрагмент, все функции листания у нас будут обрабатываться в MainActivity, а функционал самих фрагментов уже можно описать в самих фрагментах.
activity_main.xml
А дальше нам нужно создать три класса которые нам нужно отображать, и унаследовать их от класса Fragment, для примера я напишу только первый класс и его разметку, остальные классы будут идентичны только будет изменяться текст в этом фрагменте.
FirstFragment.java
По сути дела тут все просто, каждый фрагмент выполняет отдельную функцию и ничего ни кому не мешает, все элементарно и просто. Далее вам предстоит создать еще два класса SecondFragment и ThrdFgment в которых будет тоже самое что и в FirstFragment, ах да я забыл разметку:
frst.xml
Простой TextView без выпендресов (: Объяснить старался как можно проще, комментарии в коде должны донести мою мысль, хоть их там и не много но я думаю достаточно, потому что я описал там самые главные моменты, остальное не столь важно.
Скачать исходники с: GitHub | DropBox
Прежде всего нам нужно создать проект, а дальше в созданном новом классе MainActiivity сносим все к чертям до имени класса и вставляем следующий код:
MainActivity.java
public class MainActivity extends FragmentActivity {
/** идентификатор первого фрагмента. */
public static final int FRAGMENT_ONE = 0;
/** идентификатор третего. */
public static final int FRAGMENT_THREE = 2;
/** идентификатор второго. */
public static final int FRAGMENT_TWO = 1;
/** количество фрагментов. */
public static final int FRAGMENTS = 3;
/** адаптер фрагментов. */
private FragmentPagerAdapter _fragmentPagerAdapter;
/** список фрагментов для отображения. */
private final List<Fragment> _fragments = new ArrayList<Fragment>();
/** сам ViewPager который будет все это отображать. */
private ViewPager _viewPager;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// создаем фрагменты.
_fragments.add(FRAGMENT_ONE, new FirstFragment());
_fragments.add(FRAGMENT_TWO, new SecondFragment());
_fragments.add(FRAGMENT_THREE, new TherdFragment());
// Настройка фрагментов, определяющих количество фрагментов, экраны и название.
_fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return FRAGMENTS;
}
@Override
public Fragment getItem(final int position) {
return _fragments.get(position);
}
@Override
public CharSequence getPageTitle(final int position) {
switch (position) {
case FRAGMENT_ONE:
return "Title One";
case FRAGMENT_TWO:
return "Title Two";
case FRAGMENT_THREE:
return "Title three";
default:
return null;
}
}
};
_viewPager = (ViewPager) findViewById(R.id.pager);
_viewPager.setAdapter(_fragmentPagerAdapter);
_viewPager.setCurrentItem(1);
}
}
Так же нам нужно в намшем файле activity_main.xml нужно вместо стандартного текствью создать елемент фрагмента что бы можно было его использовать как фрагмент, все функции листания у нас будут обрабатываться в MainActivity, а функционал самих фрагментов уже можно описать в самих фрагментах.
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
А дальше нам нужно создать три класса которые нам нужно отображать, и унаследовать их от класса Fragment, для примера я напишу только первый класс и его разметку, остальные классы будут идентичны только будет изменяться текст в этом фрагменте.
FirstFragment.java
public class FirstFragment extends Fragment {
private Context context;
/** Handle the results from the voice recognition activity. */
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//задаем разметку фрагменту
final View view = inflater.inflate(R.layout.first, container, false);
//ну и контекст, так как фрагменты не содержат собственного
context = view.getContext();
//выводим текст который хотим
TextView wordsCount = (TextView) view.findViewById(R.id.textView1);
wordsCount.setText("FirstActivity");
return view;
}
}
По сути дела тут все просто, каждый фрагмент выполняет отдельную функцию и ничего ни кому не мешает, все элементарно и просто. Далее вам предстоит создать еще два класса SecondFragment и ThrdFgment в которых будет тоже самое что и в FirstFragment, ах да я забыл разметку:
frst.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="TextView"
android:textSize="40sp" />
</LinearLayout>
Простой TextView без выпендресов (: Объяснить старался как можно проще, комментарии в коде должны донести мою мысль, хоть их там и не много но я думаю достаточно, потому что я описал там самые главные моменты, остальное не столь важно.
Скачать исходники с: GitHub | DropBox
Комментариев нет:
Отправить комментарий