врядли поможет, но можно попробовать notifyDataSetChanged () вызвать у адаптера после удаления фрагмента.igrok-vip писал(а):Не, не в этом дело. Если допустим удалить первую страницу находясь на нулевой, то ошибка сразу не появляется, а только при пролистывании на эту страницу. Получается страница как бы удалена, но "viewpager об этом не знает" или типо того.
И главное ошибка даже если чуть-чуть потянуть и отпустить назад на нулевую)
Урок 125. ViewPager
Re: Урок 125. ViewPager
Re: Урок 125. ViewPager
Ага уже попробовал. Не помогает.
Re: Урок 125. ViewPager
Здравствуйте!
Бьюсь над тем, чтобы реализовать программное перелистывание ViewPager.
klblk посоветовал это сделать с помощью timer+handler.
Вот то, что получилось в MainActivity.java.
Проект запускается, но программное перелистывание не работает.
Подскажите, пожалуйста, кто знает, в чем причина?
package com.example.viewpage1;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.widget.ImageButton;
public class MainActivity extends FragmentActivity {
static final String TAG = "myLogs";
static final int PAGE_COUNT = 10;
ViewPager pager;
PagerAdapter pagerAdapter;
Timer timer = new Timer();
Handler h2 = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timer.schedule(new TimerTask() {
@Override
public void run() {
h2.postDelayed(this, 3000);
h2.sendEmptyMessage(0);
}
}, 0, 3000);
pager = (ViewPager) findViewById(R.id.pager);
pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
pager.setAdapter(pagerAdapter);
pager.setCurrentItem(0);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Log.d(TAG, "onPageSelected, position = " + position);
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return PageFragment.newInstance(position);
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
}
Бьюсь над тем, чтобы реализовать программное перелистывание ViewPager.
klblk посоветовал это сделать с помощью timer+handler.
Вот то, что получилось в MainActivity.java.
Проект запускается, но программное перелистывание не работает.
Подскажите, пожалуйста, кто знает, в чем причина?
package com.example.viewpage1;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.widget.ImageButton;
public class MainActivity extends FragmentActivity {
static final String TAG = "myLogs";
static final int PAGE_COUNT = 10;
ViewPager pager;
PagerAdapter pagerAdapter;
Timer timer = new Timer();
Handler h2 = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timer.schedule(new TimerTask() {
@Override
public void run() {
h2.postDelayed(this, 3000);
h2.sendEmptyMessage(0);
}
}, 0, 3000);
pager = (ViewPager) findViewById(R.id.pager);
pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
pager.setAdapter(pagerAdapter);
pager.setCurrentItem(0);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Log.d(TAG, "onPageSelected, position = " + position);
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return PageFragment.newInstance(position);
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
}
Re: Урок 125. ViewPager
Блин... я же написал тему которую нужно почитать в лс... Handler напиши нормально. и "h2.postDelayed(this, 3000);" лишнее я думаю.
И таймер включи уже после того как адаптер построил... в противном случае просто нечего будет перелистываеть
И таймер включи уже после того как адаптер построил... в противном случае просто нечего будет перелистываеть
Re: Урок 125. ViewPager
Подскажите пожалуйста, как реализовать такой функционал:
На ViewPager имеются две странички, одна из которых - ListView. На второй страничке я могу задать определенную позицию и чтобы при свайпе на первую страничку ListView уже был установлен на эту позицию. Пробовал передавать ссылку на список во второй фрагмент и там устанавливать позицию с помощью smoothScrollToPosition - но получал NullPointerException
На ViewPager имеются две странички, одна из которых - ListView. На второй страничке я могу задать определенную позицию и чтобы при свайпе на первую страничку ListView уже был установлен на эту позицию. Пробовал передавать ссылку на список во второй фрагмент и там устанавливать позицию с помощью smoothScrollToPosition - но получал NullPointerException
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 125. ViewPager
Очевидно, что когда Вы обращаетесь к списку он еще не создан. Такое бывает с фрагментами в ViewPager, так как метод onCreateView вызывается только когда действительно нужно отобразить фрагмент на экране.Akv_kiev писал(а):Подскажите пожалуйста, как реализовать такой функционал:
На ViewPager имеются две странички, одна из которых - ListView. На второй страничке я могу задать определенную позицию и чтобы при свайпе на первую страничку ListView уже был установлен на эту позицию. Пробовал передавать ссылку на список во второй фрагмент и там устанавливать позицию с помощью smoothScrollToPosition - но получал NullPointerException
Тут выход только один. Проверять список на null. Если null, записывать позицию в специальную переменную и перематывать список в момент его создания в onCreateView.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 2
- Зарегистрирован: 27 июн 2013, 01:37
Re: Урок 125. ViewPager
Подскажите пожалуйста,как реализовать функционал viewPager только в альбомной ориентации?
мне только требуется чтобы на каждой странице показывалась картина на весь экран, и кнопка. Все страницы формируются динамически в коде. управление только жестами. я почему спрашиваю , кажется и педжер и флипер работают только в портретной ориентации.
мне только требуется чтобы на каждой странице показывалась картина на весь экран, и кнопка. Все страницы формируются динамически в коде. управление только жестами. я почему спрашиваю , кажется и педжер и флипер работают только в портретной ориентации.
Re: Урок 125. ViewPager
У меня все работает в обоих ориентациях.Alexander131700 писал(а):Подскажите пожалуйста,как реализовать функционал viewPager только в альбомной ориентации?
мне только требуется чтобы на каждой странице показывалась картина на весь экран, и кнопка. Все страницы формируются динамически в коде. управление только жестами. я почему спрашиваю , кажется и педжер и флипер работают только в портретной ориентации.
Возможно вам нужно чтобы ViewPager скролился сверху-вниз?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 125. ViewPager
есть ViewPeger
необходимо обновить на одной из страниц что-то
открывается на 1 странице, пролистываю на 6, пытаюсь обновить - не фига,
прехожу на 7, и возвращаюсь на 6, пытаюсь обновить - обновляет.
т.е. те страницы , которые просматривали-1 можно обновить.
как выйти из этого ?
необходимо обновить на одной из страниц что-то
открывается на 1 странице, пролистываю на 6, пытаюсь обновить - не фига,
прехожу на 7, и возвращаюсь на 6, пытаюсь обновить - обновляет.
т.е. те страницы , которые просматривали-1 можно обновить.
как выйти из этого ?
Re: Урок 125. ViewPager
Не так быстро, я за тобой не успеваю...assan писал(а):есть ViewPeger
необходимо обновить на одной из страниц что-то
открывается на 1 странице, пролистываю на 6, пытаюсь обновить - не фига,
прехожу на 7, и возвращаюсь на 6, пытаюсь обновить - обновляет.
т.е. те страницы , которые просматривали-1 можно обновить.
как выйти из этого ?
Итак есть ViewPager из примера к уроку. Т.е. он использует фрагменты. И ты хочешь обновить текущий фрагмент, скажем поменять текст в TextView, но когда ты это проделываешь ничего не падает но текст не меняется, так?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 125. ViewPager
да пример из урока (последний варант, который не хранит в памяти)anber писал(а):Не так быстро, я за тобой не успеваю...assan писал(а):есть ViewPeger
необходимо обновить на одной из страниц что-то
открывается на 1 странице, пролистываю на 6, пытаюсь обновить - не фига,
прехожу на 7, и возвращаюсь на 6, пытаюсь обновить - обновляет.
т.е. те страницы , которые просматривали-1 можно обновить.
как выйти из этого ?
Итак есть ViewPager из примера к уроку. Т.е. он использует фрагменты. И ты хочешь обновить текущий фрагмент, скажем поменять текст в TextView, но когда ты это проделываешь ничего не падает но текст не меняется, так?
повторюсь
при переходе на страницу больше чем певаяОткрытая+1
т.е. начально открытая 1, при переходе на 2, обновление не происходит,при дебаге видно , что на этой странице ничего не находит,
если сдвинуться но следующию и вернуться назад, при дебаге видно, что поиск успешен.
т.е. на экране она есть, а на самом деле её нет...
тут http://android-developers.blogspot.ru/2 ... pager.html
это
If you’re trying to replace Views in your ViewPager, it isn’t enough just to change the data set behind the adapter and call notifyDataSetChanged(). You also need to ensure that you’ve correctly implemented getItemPosition(Object object) and return POSITION_NONE for items that have changed and return POSITION_UNCHANGED or the actual position for items that haven’t changed.
но как это прикрутить..
с одной частью разобрался
дело в том, что в памяти находится только 3 страницы.
и такое ViewPager pager = (ViewPager) activity.findViewById(R.id.pager); не берет ту страницу, которая отображается...
чтобы получить отображаемую страницу нужно сделать так(с учетом 0 страницы)
Код: Выделить всё
ViewPager pager = (ViewPager) activity.findViewById(R.id.pager);
int g=(pager.getCurrentItem()==0)?0:1;
View view=pager.getChildAt(g);
другая часть - как сохранить изменения? сделанные изменения , при переходе между страницами не сохраняются.
-
- Сообщения: 7
- Зарегистрирован: 16 июн 2013, 16:02
Re: Урок 125. ViewPager
А насколько просто вот этой штукой решить задачу пролистывания большого текста? Например, книги. Есть текстовый файл, который надо постранично просмотреть. Но если генерить содержимое каждого фрагмента вручную, то как предусмотреть разные размеры экранов, на которые влезает разное количество буковок? Или, может, у этой задачи есть более простое и изящное решение под 2.3.3?
Re: Урок 125. ViewPager
подскажите пожалуйста, как сделать чтобы страница при отображении занимала не весь экран, а только часть и при этом была видна частично следующая страница (например как в приложении ВКонтакте при открытии меню слева)?
Re: Урок 125. ViewPager
возникает вопрос - следующая это которавя ? по возрастанию или по убыванию?Dmitry88 писал(а):подскажите пожалуйста, как сделать чтобы страница при отображении занимала не весь экран, а только часть и при этом была видна частично следующая страница (например как в приложении ВКонтакте при открытии меню слева)?
сделать ViewPagrer только частью экрана во фрейме, еще один слой ниже , ине нем отображать "следующую страницу"
определиться , что сначит следующая страница и на момент, клгда она строится - строить еще один экземпляр этой страницы в "нижнем слое"
Re: Урок 125. ViewPager
извиняюсь за некорректное объяснение. Под "следующей страницей" я имел ввиду ту, на которой мы находились в момент, до того как начали листать. Мне необходимо сделать так, чтобы одна активити была главной, а другая была в качестве навигационного меню и вызывалась при помощи ViewPager, проводя пальцем по экрану вправо, но только так, чтобы не занимала весь экран телефона, а лишь часть. Надеюсь никого не запуталвозникает вопрос - следующая это которая ? по возрастанию или по убыванию?
Re: Урок 125. ViewPager
всё равно не дошло...Dmitry88 писал(а):извиняюсь за некорректное объяснение. Под "следующей страницей" я имел ввиду ту, на которой мы находились в момент, до того как начали листать. Мне необходимо сделать так, чтобы одна активити была главной, а другая была в качестве навигационного меню и вызывалась при помощи ViewPager, проводя пальцем по экрану вправо, но только так, чтобы не занимала весь экран телефона, а лишь часть. Надеюсь никого не запуталвозникает вопрос - следующая это которая ? по возрастанию или по убыванию?
тебе надо чтоб при движении по экрану выдвинулось навигационное меню?
и выдвинулось только на часть экрана?
если так то ViewPager здесь не при делах
тут решатся анимацией выдвижения слоя
Re: Урок 125. ViewPager
даа, именно так надо. спасибо за подсказку, буду копаться с анимацией значит)всё равно не дошло...
тебе надо чтоб при движении по экрану выдвинулось навигационное меню?
и выдвинулось только на часть экрана?
если так то ViewPager здесь не при делах
тут решатся анимацией выдвижения слоя
Re: Урок 125. ViewPager
когда будешь "Сдвигать слой" влево (т.е. прятать за экран) его не достаточно сдвинут, его надо ещё сделать нулевой ширины
простой сдвиг только делает его не видимым, но не деает прозрачным для нажатий и прочих манипуляций палцами по экрану
простой сдвиг только делает его не видимым, но не деает прозрачным для нажатий и прочих манипуляций палцами по экрану
Re: Урок 125. ViewPager
В поисках решения своей проблемы наткнулся вот на что: http://www.youtube.com/watch?v=z3QE74xRxp8 и http://blog.stylingandroid.com/archives/1793 .
В первом случае используется библиотека ActionBarSherlock, но суть одна - ключ к использованию выдвижного меню лежит через DrawerLayout. Также на офсайте нашел-таки необходимую информацию: тыц, тут пример менее нагружен лишним кодом - самое оно для изучения интересующего вопроса, коротко и по делу))
Может кому пригодится
В первом случае используется библиотека ActionBarSherlock, но суть одна - ключ к использованию выдвижного меню лежит через DrawerLayout. Также на офсайте нашел-таки необходимую информацию: тыц, тут пример менее нагружен лишним кодом - самое оно для изучения интересующего вопроса, коротко и по делу))
Может кому пригодится
Re: Урок 125. ViewPager
значит у меня намного проще, через анимацию, в любую сторону.