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

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 12:27
igrok-vip
Скажите я правильно понял, что для отображения нужного содержимого на каждой странице я должен использовать case в методе onCreateView и в зависимости от pageNumber выводить нужные элементы экрана?

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 12:58
rezak90
igrok-vip писал(а):Скажите я правильно понял, что для отображения нужного содержимого на каждой странице я должен использовать case в методе onCreateView и в зависимости от pageNumber выводить нужные элементы экрана?
это если Вы используете один фрагмент для отображения

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 16:58
igrok-vip
Блин, я в тупике.
Я хотел сделать внутри ViewPager редактируемые списки через ListView. Редактироваться они должны были через контекстное меню(Изменить, Удалить, Добавить) + кастомное диалоговое окно с EditText.
1) Не могу сделать кастомное диалоговое окно внутри PageFragment. Ругается на onPrepareDialog и onCreateDialog (обычные диалоги создаются отлично).
2) Перенёс onPrepareDialog и onCreateDialog в MainActivity - диалоги заработали, но не могу изменять наполнение ListView во фрагменте из MainActivity. Точнее могу, но всё отображается коряво(то пока не прокрутишь не отобразиться, то отображается сразу на 2х страницах).

Подскажите что можно использовать вместо кастомного диалогового окна во фрагменте или как заставить кастомные работать во фрагменте или как правильно редактировать ListView из MainActivity?

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 17:57
rezak90
igrok-vip писал(а):Блин, я в тупике.
Я хотел сделать внутри ViewPager редактируемые списки через ListView. Редактироваться они должны были через контекстное меню(Изменить, Удалить, Добавить) + кастомное диалоговое окно с EditText.
1) Не могу сделать кастомное диалоговое окно внутри PageFragment. Ругается на onPrepareDialog и onCreateDialog (обычные диалоги создаются отлично).
2) Перенёс onPrepareDialog и onCreateDialog в MainActivity - диалоги заработали, но не могу изменять наполнение ListView во фрагменте из MainActivity. Точнее могу, но всё отображается коряво(то пока не прокрутишь не отобразиться, то отображается сразу на 2х страницах).

Подскажите что можно использовать вместо кастомного диалогового окна во фрагменте или как заставить кастомные работать во фрагменте или как правильно редактировать ListView из MainActivity?
Давно такого поста не видел. Всё нормально работает, если Вы не правильно приготовили значит показывайте код и будем смотреть что и где не правильно.

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 18:35
igrok-vip
Сначала я пытался сделать кастомный диалог внутри PageFragment
[syntax=java]
package com.example.test4;

import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;



public class PageFragment extends Fragment {

static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";

int pageNumber;
String names[] = { "Иванов И.И.", "Петров П.П.",
"Сидоров С.С.", "Васькин В.В.", "Пупкин П.П.",
"Смирнов С.С.", "Косточкин К.К.", "Виляева В.В.",
"Смоленов С.С.", "Трубицкой Т.Т.", "Земляникин З.З.",
"Коровин К.К.", "Коробочкин К.К.", "Смирнова С.С.",
"Сидоров С.С.", };
ArrayAdapter<String> adapter;
static int itemselected;
final int M_EDIT = 100;
final int M_DELETE = 101;
final int M_ADD = 102;
final int D_EDIT = 200;
final int D_DELETE = 201;
final int D_ADD = 202;
EditText ed;


static PageFragment newInstance(int page) {
PageFragment pageFragment = new PageFragment();
Bundle arguments = new Bundle();
arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
pageFragment.setArguments(arguments);
return pageFragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
itemselected = aMenuInfo.position;

menu.add(Menu.NONE, M_EDIT, Menu.NONE, "Изменить");
menu.add(Menu.NONE, M_DELETE, Menu.NONE, "Удалить");
menu.add(Menu.NONE, M_ADD, Menu.NONE, "Добавить");

}


@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
if (id == D_EDIT) {
}
}


@Override
protected Dialog onCreateDialog(int id) {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
LinearLayout L_view = (LinearLayout) getLayoutInflater().inflate(R.layout.dialog, null);
ed = new EditText(getActivity());
adb.setView(L_view);
return adb.create();
}


@Override
public boolean onContextItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case M_EDIT:
showDialog(D_EDIT);
break;
case M_DELETE:
showDialog(D_DELETE);
break;
case M_ADD:
showDialog(D_ADD);
break;

default:
return super.onContextItemSelected(item);
}

return true;
}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.activity_page_fragment, null);
ListView lvMain = (ListView) view.findViewById(R.id.lvMain);



switch (pageNumber){
case 0:

adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, names);
lvMain.setAdapter(adapter);
registerForContextMenu(lvMain);
break;

}

return view;
}


}
[/syntax]
убрал лишнее чтобы не мешалось

Но эклипс ругается на onPrepareDialog(The method onPrepareDialog(int, Dialog) of type PageFragment must override or implement a supertype method)
на super.onPrepareDialog (The method onPrepareDialog(int, Dialog) is undefined for the type Fragment)
на onCreateDialog (The method onCreateDialog(int) of type PageFragment must override or implement a supertype method)
на getLayoutInflate (The method getLayoutInflater(Bundle) in the type Fragment is not applicable for the arguments ())
и на showDialog (The method showDialog(int) is undefined for the type PageFragment)

Потом перенёс onPrepareDialog и onCreateDialog в mainactivity и попытался в кнопках изменить массив names, найти ListView и присвоить ему адаптер по новой, чтобы список обновился, но это привело к глюкам, про которые я писал ранее

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 18:47
rezak90
с чего Вы взяли что в Fragment есть методы onPrepareDialog, onCreateDialog, getLayoutInflate, showDialog?

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 18:55
igrok-vip
а если их там нет, как быть?

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 19:18
rezak90
igrok-vip писал(а):а если их там нет, как быть?
диалог создаётся при помощи DialogFragment, 110 урок

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 19:23
igrok-vip
А вон оно что. Всё ясно, спасибо.

Re: Урок 125. ViewPager

Добавлено: 06 май 2013, 22:25
Ivan_P
Доброго времени суток!
Решил добавить на страничку вывод изображения (то есть чтобы Page1 содержала картинку image1, Page2 - image2 и т.д. ). И столкнулся с проблемой генерации строки ресурса для setImageResource
Код примерно следующий:
ImageView IvImg = (ImageView) view.findViewById(R.id.ivImg);
int pn = pageNumber;
String pns = Integer.toString(pn);
int plans = getResources().getIdentifier("image" + pns, "drawable", "P1251_ViewPager");
IvImg.setImageResource(plans);

В итоге тянется картинка blank на каждой страничке. Пробовал тянуть и из "raw" и из "assets". Но проблема осталась. Что посоветуете, коллеги?

Re: Урок 125. ViewPager

Добавлено: 07 май 2013, 22:22
Ivan_P
Разобрался сам. Отработал следующий код
int plans = getResources().getIdentifier("com.example.p1251_viewpager" + ":raw/image" + pns, null, null);

Re: Урок 125. ViewPager

Добавлено: 13 май 2013, 09:27
Sanuch89
Здравствуйте!

У меня проблема. Есть ViewPager - у него 3 страницы. Использую SamplePagerAdapter.

По сетевому протоколу я принимаю данные и мне нужно их обработать и ими заполнять все три страницы одновременно. Проблема в том что если я нахожусь на 1-й странице, то я не могу заполнить данные на 3-й странице и наоборот (генерируется исключение).

Я думаю, что это связано с тем, что уничтожается View-структура страницы, которая находится через одну от текущей. И при обращении к View-элементу этой странице происходит ошибка, т.к. фактически его не существует.

В принципе, можно вычислять какая сейчас страница и выводить данные только в неё, а остальные обрабатывать, но не выводить.
Но интересует вопрос. Возможно ли сделать так, чтобы View-структура всех страниц сохранялась в памяти?

Заранее спасибо!

Всё, разобрался:) Не прочитал внимательно урок:) Для этого есть метод setOffscreenPageLimit.

Re: Урок 125. ViewPager

Добавлено: 19 май 2013, 18:26
azusdex
Здравствуйте!
У меня есть ViewPager, с 3 станицами
Проблема в том, что если я захожу на 3 страницу и делаю новую загрузку данных, то я могу обновить только первую страницу, а вторую нет. Насколько я понял он держит ее в памяти, а как же мне подобратся к элементам на второй странице?

Зарание спасибо!

Re: Урок 125. ViewPager

Добавлено: 04 июн 2013, 11:47
gorod
Здравствуйте, уважаемые форумчане!

Прошу, если можно, помочь в следующем вопросе.
Есть несколько фрагментов: fragment1.xml, fragment2.xml ..., fragment15.xml.
Подскажите, как сделать так, чтобы перелистывание страниц осуществлялось программно и через заданный интервал времени, и при этом на страницу 1 подставлялось содержимое фрагмента 1, на страницу 2 - фрагмента 2 и т.д.

Благодарю всех, кто сможет откликнуться.

Re: Урок 125. ViewPager

Добавлено: 04 июн 2013, 12:30
KamiSempai
Программное перелистывание страниц осуществляется методом setCurrentItem. Если вторым параметром указать true то произойдет "плавная" прокрутка до указанной страницы.

Про использование фрагментов в ViewPager много расписывать не буду вот >>ССЫЛКА<< на FragmentPagerAdapter, используйте его. Там же есть пример по его использованию.

Re: Урок 125. ViewPager

Добавлено: 04 июн 2013, 13:50
gorod
Про использование фрагментов в ViewPager много расписывать не буду вот >>ССЫЛКА<< на FragmentPagerAdapter, используйте его. Там же есть пример по его использованию.
Вы знаете, я попробовал использовать пример по указанной ссылке, но ничего не работает. Eclipse ругается на множество ошибок.
В папке layout создал 2 файла R.layout.fragment_pager_list.xml и R.layout.fragment_pager.xml, в папке src создал новый класс FragmentPagerSupport.java
В чем может быть причина, как Вы думаете?

Re: Урок 125. ViewPager

Добавлено: 04 июн 2013, 14:05
Shtihl
а может надо было в папке Layout файлы называть не R.layout.filename.xml а просто filename.xml?

Re: Урок 125. ViewPager

Добавлено: 04 июн 2013, 14:06
klblk
мб отсутствует android.support.v4? Ну и фраза "Eclipse ругается на множество ошибок" ни о чём не говорит.

Re: Урок 125. ViewPager

Добавлено: 04 июн 2013, 14:47
gorod
Shtihl писал(а):а может надо было в папке Layout файлы называть не R.layout.filename.xml а просто filename.xml?
Нет же, посмотрите ссылку, там файлы именно так и названы.

Re: Урок 125. ViewPager

Добавлено: 04 июн 2013, 15:04
KamiSempai
gorod писал(а):
Shtihl писал(а):а может надо было в папке Layout файлы называть не R.layout.filename.xml а просто filename.xml?
Нет же, посмотрите ссылку, там файлы именно так и названы.
Shtihl прав. Вы не правильно назвали файлы. R.layout.fragment_pager_list и R.layout.fragment_pager - это Id ресурсов.