Страница 9 из 11

Re: Урок 125. ViewPager

Добавлено: 21 апр 2014, 15:28
dangerclose
подскажите как добавлять сюда view элементы?

Re: Урок 125. ViewPager

Добавлено: 21 апр 2014, 17:05
Mikhail_dev
Как в уроке.

Re: Урок 125. ViewPager

Добавлено: 25 апр 2014, 15:47
SlavaKuzmin
Вобщем обнаружил вот что насчёт моей проблемы по смазыванию экрана: если при создании проекта выбирать Blank Activity и использовать его то всё нормально, если же Fullscreen, то происходит сей баг при использовании любого fragment. Если Fullscreen получать из Blank программно, то опять же всё ок. Можете кто-нибудь попробовать выполнить данный урок, но отметить изначально Fullscreen, и посмотреть что будет. Может у меня одного такое.

Re: Урок 125. ViewPager

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

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

Re: Урок 125. ViewPager

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

Пост был взял с - 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>

Re: Урок 125. ViewPager

Добавлено: 08 окт 2014, 06:23
Persik
Я взяла сайт 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));
            }
        }
	}
}

Re: Урок 125. ViewPager

Добавлено: 23 ноя 2014, 11:55
FastRus1804
у меня 3 вопроса есть

1) как сохранить данные при повороте экрана
2)можно сделать вертикальный скролинг страниц?

Re: Урок 125. ViewPager

Добавлено: 23 ноя 2014, 12:24
Foenix
а что до урока по сохранению данных вы не дочитали?
вертикальный скролл - компонент поищите на палитре скролвью кажется.

Re: Урок 125. ViewPager

Добавлено: 23 ноя 2014, 13:34
FastRus1804
Foenix писал(а):а что до урока по сохранению данных вы не дочитали?
вертикальный скролл - компонент поищите на палитре скролвью кажется.

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

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

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

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

Re: Урок 125. ViewPager

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

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

Re: Урок 125. ViewPager

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

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

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

Re: Урок 125. ViewPager

Добавлено: 24 ноя 2014, 08:00
FastRus1804

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

    @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);
    }

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

Добавлено: 26 ноя 2014, 09:45
finberg
adapter относится к ListView или ViewPager?

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

Добавлено: 16 янв 2015, 17:39
khirh
Подскажите начинающему,пожалуйста

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

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

Re: Урок 125. ViewPager

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