Урок 125. ViewPager

Обсуждение уроков
dangerclose
Сообщения: 37
Зарегистрирован: 21 апр 2014, 15:27

Re: Урок 125. ViewPager

Сообщение dangerclose » 21 апр 2014, 15:28

подскажите как добавлять сюда view элементы?


SlavaKuzmin
Сообщения: 2
Зарегистрирован: 17 апр 2014, 11:13

Re: Урок 125. ViewPager

Сообщение SlavaKuzmin » 25 апр 2014, 15:47

Вобщем обнаружил вот что насчёт моей проблемы по смазыванию экрана: если при создании проекта выбирать Blank Activity и использовать его то всё нормально, если же Fullscreen, то происходит сей баг при использовании любого fragment. Если Fullscreen получать из Blank программно, то опять же всё ок. Можете кто-нибудь попробовать выполнить данный урок, но отметить изначально Fullscreen, и посмотреть что будет. Может у меня одного такое.
Вложения
Безымянный.jpg
Безымянный.jpg (90.7 КБ) 14093 просмотра

AlexVinn
Сообщения: 81
Зарегистрирован: 04 апр 2014, 04:56

Re: Урок 125. ViewPager

Сообщение AlexVinn » 21 май 2014, 18:26

Использую ActionBar и
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Как понял из топика, что кастомизировать его нельзя.
Хочу создать такие же закладки но с картинками на них. Ну и свайп желательно.
Уверен должны быть такие разработки.
Помогите в какую сторону копать. Может ссылки какие...

Вот так было бы классно сделать - http://webfile.ru/7c6557316ec50bf22ee48793bd57c39b
Тут должна быть подпись.

Maski
Сообщения: 12
Зарегистрирован: 26 сен 2014, 07:55

Re: Урок 125. ViewPager

Сообщение Maski » 26 сен 2014, 08:08

Здравствуйте! А можно сделать что бы просто картинку перемещать , которая находится на средине экрана , не используя фрагменты а использую одни комнопенты? Подскажите что у меня не правильно ?

Пост был взял с - http://habrahabr.ru/post/131889/
Вот пример:
Вопрос
а как зафиксировать один View, чтобы он не перемещался при слайдинге? например элемент Button или ImageView
Ответ
Можно описать в файле разметки элементы так, чтобы ViewPager был лишь одним из компонентов. Например, создать такой файл main_layout.xml:

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

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon"/>
    
    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
    
</LinearLayout>
Затем в activity приложения делаем setContentView(R.layout.main_layout), а экземпляр ViewPager добываем с помощью findViewById(R.id.view_pager).
Указанная картинка будет находиться наверху экрана, а страницы, которые скроллятся с помощью ViewPager будут располагаться ниже.
Вот моя часть кода , в которой перелистывывается вся активность -

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

 \......
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

     //===========================================
     
     LayoutInflater inflater = LayoutInflater.from(this);
     List<View> pages = new ArrayList<View>();
     

     
     View page = inflater.inflate(R.layout.main_layout, null);
     ViewPager vp = (ViewPager)page.findViewById(R.id.view_pager);
     pages.add(page);
     
     page = inflater.inflate(R.layout.main2, null);
     pages.add(page);
         
     
     
     SamplePagerAdapter pagerAdapter = new SamplePagerAdapter(pages);
     ViewPager viewPager = new ViewPager(this);
     viewPager.setAdapter(pagerAdapter);
     viewPager.setCurrentItem(1);     
     
     setContentView(viewPager);
     
     //==========================================
      
    }


    }

 \........
main_layout

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>
    
    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="300dp"
        android:layout_height="400dp" >

    </android.support.v4.view.ViewPager>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="51dp"
        android:layout_toRightOf="@+id/image"
        android:text="Button" />

</RelativeLayout>
main2

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <ImageView
        android:id="@+id/image1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>
    
    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="300dp"
        android:layout_height="400dp" >

    </android.support.v4.view.ViewPager>

    <Button
        android:id="@+id/button11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="51dp"
        android:layout_toRightOf="@+id/image"
        android:text="Button" />

</RelativeLayout>

Persik
Сообщения: 19
Зарегистрирован: 15 май 2014, 08:55

Re: Урок 125. ViewPager

Сообщение Persik » 08 окт 2014, 06:23

Я взяла сайт http://www.tuicool.com/articles/qY3yya и копировала код. Где FragmentTab1.class, я написала свои код. Никаких ошибок исходники. Но когда запускает эмулятор, он выдает ошибка и не показывает viewpager. У меня все фрагменты, я что-то не правильно написала или где-то упустила... Или из за этого ошибка public void onActivityCreated(Bundle savedInstanceState)?

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

public class FragmentTab1 extends Fragment {
 
	private ListView listView;
	private WeakReference<GetSchedAsyncTask> getSchedTaskWeakRef;
	
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragmenttab1, container, false);
          }
    	@Override
	public void onActivityCreated(Bundle savedInstanceState){
		super.onActivityCreated(savedInstanceState);
		listView = (ListView) getView().findViewById(R.id.fragment_list);
		listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
	public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
		String name = ((TextView)view.findViewById(R.id.fragmentName)).getText().toString();
		Intent i = new Intent (getActivity(),NameActivity.class);
			i.putExtra(NameActivity.FRAGMENT_NAME, name);
			startActivity(i);
			}
		});
		setRetainInstance(true);
		startNewAsyncTask();
	}
	private void startNewAsyncTask() {
		Calendar calendar = Calendar.getInstance();
		int day = calendar.get(Calendar.DAY_OF_WEEK);
		String weekType;
		if (day==1 || day ==7) {
			weekType="we";
		}
		else
			weekType="wd";
		String timeNow = (new SimpleDateFormat("HH:mm").format(calendar.getTime()));
		GetSchedAsyncTask asyncTask = new GetSchedAsyncTask(this);
		this.getSchedTaskWeakRef = new WeakReference<GetSchedAsyncTask>(asyncTask);
		asyncTask.execute(weekType,timeNow);
	}

	private class GetSchedAsyncTask extends AsyncTask<Object, Void, List<Schedule>> {
        private WeakReference<FragmentTab1> fragmentWeakRef;
        private GetSchedAsyncTask (FragmentTab1 fragment) {
            this.fragmentWeakRef = new WeakReference<FragmentTab1>(fragment);
        }

        @Override
        protected List<Schedule> doInBackground(Object... params) {
        	NameDatabase db = NameDatabase.getInstance(getActivity());
        	List<Schedule> schedule = db.getSchedule((String) params[0], (String) params[1]);
              return schedule;
        }

        @Override
        protected void onPostExecute(List<Schedule> schedule) {
            super.onPostExecute(schedule);
            
            if (this.fragmentWeakRef.get() != null) {
            	listView.setAdapter(new ScheduleListAdapter(getActivity(), R.layout.station_row_item, schedule));
            }
        }
	}
}

Аватара пользователя
FastRus1804
Сообщения: 49
Зарегистрирован: 22 июн 2014, 11:20

Re: Урок 125. ViewPager

Сообщение FastRus1804 » 23 ноя 2014, 11:55

у меня 3 вопроса есть

1) как сохранить данные при повороте экрана
2)можно сделать вертикальный скролинг страниц?
Вложения
3) как сделать такую реализацию ViewPager
3) как сделать такую реализацию ViewPager
Снимок.PNG (18.34 КБ) 13893 просмотра

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

Re: Урок 125. ViewPager

Сообщение Foenix » 23 ноя 2014, 12:24

а что до урока по сохранению данных вы не дочитали?
вертикальный скролл - компонент поищите на палитре скролвью кажется.
R.id.team

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

Аватара пользователя
FastRus1804
Сообщения: 49
Зарегистрирован: 22 июн 2014, 11:20

Re: Урок 125. ViewPager

Сообщение FastRus1804 » 23 ноя 2014, 13:34

Foenix писал(а):а что до урока по сохранению данных вы не дочитали?
вертикальный скролл - компонент поищите на палитре скролвью кажется.

Читал. Но здесь то используется адаптер фрагменты. Как в этом случае сохранять там не написано . Я пытался сделать аналогию с тем уроком, но ничего не вышло.

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

Re: Урок 125. ViewPager

Сообщение Foenix » 23 ноя 2014, 15:20

Книжка по сети гуляет Харди, Филипс Программирование для андроид. Там фрагменты очень подробно рассмотрены на примерах, и вопрос поворотов тоже. Советую.
По сути там аналогично активностям можно сохранять все в onSaveInstance
R.id.team

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

Аватара пользователя
FastRus1804
Сообщения: 49
Зарегистрирован: 22 июн 2014, 11:20

Re: Урок 125. ViewPager

Сообщение FastRus1804 » 23 ноя 2014, 21:18

Foenix писал(а):Книжка по сети гуляет Харди, Филипс Программирование для андроид. Там фрагменты очень подробно рассмотрены на примерах, и вопрос поворотов тоже. Советую.
По сути там аналогично активностям можно сохранять все в onSaveInstance

То есть нужно было прописать setRetainInstance(true); и все XD
Спасибо. Хорошая книга. ;)

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

Re: Урок 125. ViewPager

Сообщение Foenix » 24 ноя 2014, 00:38

FastRus1804 писал(а):
Foenix писал(а):Книжка по сети гуляет Харди, Филипс Программирование для андроид. Там фрагменты очень подробно рассмотрены на примерах, и вопрос поворотов тоже. Советую.
По сути там аналогично активностям можно сохранять все в onSaveInstance

То есть нужно было прописать setRetainInstance(true); и все XD
Спасибо. Хорошая книга. ;)
да нет, не все так просто
R.id.team

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

Аватара пользователя
FastRus1804
Сообщения: 49
Зарегистрирован: 22 июн 2014, 11:20

Re: Урок 125. ViewPager

Сообщение FastRus1804 » 24 ноя 2014, 07:46

Foenix писал(а):
FastRus1804 писал(а):
Foenix писал(а):Книжка по сети гуляет Харди, Филипс Программирование для андроид. Там фрагменты очень подробно рассмотрены на примерах, и вопрос поворотов тоже. Советую.
По сути там аналогично активностям можно сохранять все в onSaveInstance

То есть нужно было прописать setRetainInstance(true); и все XD
Спасибо. Хорошая книга. ;)
да нет, не все так просто

Ну я понял что в случае нехватки памяти, всё равно фрагмент удалится. и там уже нужен onSaveInstanceState.

Аватара пользователя
FastRus1804
Сообщения: 49
Зарегистрирован: 22 июн 2014, 11:20

Re: Урок 125. ViewPager

Сообщение FastRus1804 » 24 ноя 2014, 08:00

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

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState==null){
        pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);

        Random r = new Random();
        backColor = Color.argb(40, r.nextInt(255), r.nextInt(255), r.nextInt(255));}
        else
        {
            backColor = savedInstanceState.getInt("backColor", 0);
            pageNumber = savedInstanceState.getInt("pageNumber", 0);
        }

        //setRetainInstance(true);
    }

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

 @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("pageNumber", pageNumber);
        outState.putInt("backColor", backColor);
    }

prometey
Сообщения: 3
Зарегистрирован: 25 ноя 2014, 13:23

Re: Урок 125. ViewPager

Сообщение prometey » 25 ноя 2014, 13:34

Привет всем. Друзья, помогите справиться с проблемой. У меня есть ViewPager состоящий из 3 фрагментов. В среднем (1) фрагменте у меня находиться ListView, а в первом(0) или третьем (2) фрагменте я добавляю данные в ArrayList, который в дальнейшем используется для заполнения моего ListView в среднем фрагменте. Проблема заключается в том, что при возвращении в средний фрагмент, мой ListView в нем не обновляется, соответственно в результате чего при нажатии на список вылетает ошибка.
Для обновления списка я использую adapter.notifyDataSetChanged(); , но ничего не происходит. Что я делаю не так или может кто то знает какой то способ обновления этого списка? За ранее спасибо.

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

Re: Урок 125. ViewPager

Сообщение finberg » 26 ноя 2014, 09:45

adapter относится к ListView или ViewPager?

prometey
Сообщения: 3
Зарегистрирован: 25 ноя 2014, 13:23

Re: Урок 125. ViewPager

Сообщение prometey » 26 ноя 2014, 10:56

finberg писал(а):adapter относится к ListView или ViewPager?
Использовал и к ListView и к ViewPager. Я вот уже думаю, может надо как то убить фрагмент в котором находиться список, а потом его пересоздать? Проблема в том, что ViewPager хранит в памяти как минимум три фрагмента - открытый, предыдущий и следующий за открытым.

prometey
Сообщения: 3
Зарегистрирован: 25 ноя 2014, 13:23

Re: Урок 125. ViewPager

Сообщение prometey » 04 дек 2014, 17:22

prometey писал(а):
finberg писал(а):adapter относится к ListView или ViewPager?
Использовал и к ListView и к ViewPager. Я вот уже думаю, может надо как то убить фрагмент в котором находиться список, а потом его пересоздать? Проблема в том, что ViewPager хранит в памяти как минимум три фрагмента - открытый, предыдущий и следующий за открытым.
Все, разобрался)

khirh
Сообщения: 5
Зарегистрирован: 30 дек 2014, 00:06

Re: Урок 125. ViewPager

Сообщение khirh » 16 янв 2015, 17:39

Подскажите начинающему,пожалуйста

пытаюсь поместить ListView на ViewPager. Но не могу понять какой указать Context при создании ArrayAdapter?

ArrayAdapter<String> lvAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list)
- ругается что не может найти конструктора под такой вызов

khirh
Сообщения: 5
Зарегистрирован: 30 дек 2014, 00:06

Re: Урок 125. ViewPager

Сообщение khirh » 16 янв 2015, 17:43

prometey писал(а):
finberg писал(а):adapter относится к ListView или ViewPager?
Использовал и к ListView и к ViewPager. Я вот уже думаю, может надо как то убить фрагмент в котором находиться список, а потом его пересоздать? Проблема в том, что ViewPager хранит в памяти как минимум три фрагмента - открытый, предыдущий и следующий за открытым.
можно уменьшить кол-во страниц в памяти - pager.setOffscreenPageLimit(0);

Ответить