Урок 125. ViewPager
Re: Урок 125. ViewPager
Скажите я правильно понял, что для отображения нужного содержимого на каждой странице я должен использовать case в методе onCreateView и в зависимости от pageNumber выводить нужные элементы экрана?
Re: Урок 125. ViewPager
это если Вы используете один фрагмент для отображенияigrok-vip писал(а):Скажите я правильно понял, что для отображения нужного содержимого на каждой странице я должен использовать case в методе onCreateView и в зависимости от pageNumber выводить нужные элементы экрана?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 125. ViewPager
Блин, я в тупике.
Я хотел сделать внутри ViewPager редактируемые списки через ListView. Редактироваться они должны были через контекстное меню(Изменить, Удалить, Добавить) + кастомное диалоговое окно с EditText.
1) Не могу сделать кастомное диалоговое окно внутри PageFragment. Ругается на onPrepareDialog и onCreateDialog (обычные диалоги создаются отлично).
2) Перенёс onPrepareDialog и onCreateDialog в MainActivity - диалоги заработали, но не могу изменять наполнение ListView во фрагменте из MainActivity. Точнее могу, но всё отображается коряво(то пока не прокрутишь не отобразиться, то отображается сразу на 2х страницах).
Подскажите что можно использовать вместо кастомного диалогового окна во фрагменте или как заставить кастомные работать во фрагменте или как правильно редактировать ListView из MainActivity?
Я хотел сделать внутри ViewPager редактируемые списки через ListView. Редактироваться они должны были через контекстное меню(Изменить, Удалить, Добавить) + кастомное диалоговое окно с EditText.
1) Не могу сделать кастомное диалоговое окно внутри PageFragment. Ругается на onPrepareDialog и onCreateDialog (обычные диалоги создаются отлично).
2) Перенёс onPrepareDialog и onCreateDialog в MainActivity - диалоги заработали, но не могу изменять наполнение ListView во фрагменте из MainActivity. Точнее могу, но всё отображается коряво(то пока не прокрутишь не отобразиться, то отображается сразу на 2х страницах).
Подскажите что можно использовать вместо кастомного диалогового окна во фрагменте или как заставить кастомные работать во фрагменте или как правильно редактировать ListView из MainActivity?
Re: Урок 125. ViewPager
Давно такого поста не видел. Всё нормально работает, если Вы не правильно приготовили значит показывайте код и будем смотреть что и где не правильно.igrok-vip писал(а):Блин, я в тупике.
Я хотел сделать внутри ViewPager редактируемые списки через ListView. Редактироваться они должны были через контекстное меню(Изменить, Удалить, Добавить) + кастомное диалоговое окно с EditText.
1) Не могу сделать кастомное диалоговое окно внутри PageFragment. Ругается на onPrepareDialog и onCreateDialog (обычные диалоги создаются отлично).
2) Перенёс onPrepareDialog и onCreateDialog в MainActivity - диалоги заработали, но не могу изменять наполнение ListView во фрагменте из MainActivity. Точнее могу, но всё отображается коряво(то пока не прокрутишь не отобразиться, то отображается сразу на 2х страницах).
Подскажите что можно использовать вместо кастомного диалогового окна во фрагменте или как заставить кастомные работать во фрагменте или как правильно редактировать ListView из MainActivity?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 125. ViewPager
Сначала я пытался сделать кастомный диалог внутри 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 и присвоить ему адаптер по новой, чтобы список обновился, но это привело к глюкам, про которые я писал ранее
[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
с чего Вы взяли что в Fragment есть методы onPrepareDialog, onCreateDialog, getLayoutInflate, showDialog?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 125. ViewPager
а если их там нет, как быть?
Re: Урок 125. ViewPager
диалог создаётся при помощи DialogFragment, 110 урокigrok-vip писал(а):а если их там нет, как быть?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 125. ViewPager
А вон оно что. Всё ясно, спасибо.
Re: Урок 125. ViewPager
Доброго времени суток!
Решил добавить на страничку вывод изображения (то есть чтобы 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". Но проблема осталась. Что посоветуете, коллеги?
Решил добавить на страничку вывод изображения (то есть чтобы 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
Разобрался сам. Отработал следующий код
int plans = getResources().getIdentifier("com.example.p1251_viewpager" + ":raw/image" + pns, null, null);
int plans = getResources().getIdentifier("com.example.p1251_viewpager" + ":raw/image" + pns, null, null);
Re: Урок 125. ViewPager
Здравствуйте!
У меня проблема. Есть ViewPager - у него 3 страницы. Использую SamplePagerAdapter.
По сетевому протоколу я принимаю данные и мне нужно их обработать и ими заполнять все три страницы одновременно. Проблема в том что если я нахожусь на 1-й странице, то я не могу заполнить данные на 3-й странице и наоборот (генерируется исключение).
Я думаю, что это связано с тем, что уничтожается View-структура страницы, которая находится через одну от текущей. И при обращении к View-элементу этой странице происходит ошибка, т.к. фактически его не существует.
В принципе, можно вычислять какая сейчас страница и выводить данные только в неё, а остальные обрабатывать, но не выводить.
Но интересует вопрос. Возможно ли сделать так, чтобы View-структура всех страниц сохранялась в памяти?
Заранее спасибо!
Всё, разобрался:) Не прочитал внимательно урок:) Для этого есть метод setOffscreenPageLimit.
У меня проблема. Есть ViewPager - у него 3 страницы. Использую SamplePagerAdapter.
По сетевому протоколу я принимаю данные и мне нужно их обработать и ими заполнять все три страницы одновременно. Проблема в том что если я нахожусь на 1-й странице, то я не могу заполнить данные на 3-й странице и наоборот (генерируется исключение).
Я думаю, что это связано с тем, что уничтожается View-структура страницы, которая находится через одну от текущей. И при обращении к View-элементу этой странице происходит ошибка, т.к. фактически его не существует.
В принципе, можно вычислять какая сейчас страница и выводить данные только в неё, а остальные обрабатывать, но не выводить.
Но интересует вопрос. Возможно ли сделать так, чтобы View-структура всех страниц сохранялась в памяти?
Заранее спасибо!
Всё, разобрался:) Не прочитал внимательно урок:) Для этого есть метод setOffscreenPageLimit.
Re: Урок 125. ViewPager
Здравствуйте!
У меня есть ViewPager, с 3 станицами
Проблема в том, что если я захожу на 3 страницу и делаю новую загрузку данных, то я могу обновить только первую страницу, а вторую нет. Насколько я понял он держит ее в памяти, а как же мне подобратся к элементам на второй странице?
Зарание спасибо!
У меня есть ViewPager, с 3 станицами
Проблема в том, что если я захожу на 3 страницу и делаю новую загрузку данных, то я могу обновить только первую страницу, а вторую нет. Насколько я понял он держит ее в памяти, а как же мне подобратся к элементам на второй странице?
Зарание спасибо!
Re: Урок 125. ViewPager
Здравствуйте, уважаемые форумчане!
Прошу, если можно, помочь в следующем вопросе.
Есть несколько фрагментов: fragment1.xml, fragment2.xml ..., fragment15.xml.
Подскажите, как сделать так, чтобы перелистывание страниц осуществлялось программно и через заданный интервал времени, и при этом на страницу 1 подставлялось содержимое фрагмента 1, на страницу 2 - фрагмента 2 и т.д.
Благодарю всех, кто сможет откликнуться.
Прошу, если можно, помочь в следующем вопросе.
Есть несколько фрагментов: fragment1.xml, fragment2.xml ..., fragment15.xml.
Подскажите, как сделать так, чтобы перелистывание страниц осуществлялось программно и через заданный интервал времени, и при этом на страницу 1 подставлялось содержимое фрагмента 1, на страницу 2 - фрагмента 2 и т.д.
Благодарю всех, кто сможет откликнуться.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 125. ViewPager
Программное перелистывание страниц осуществляется методом setCurrentItem. Если вторым параметром указать true то произойдет "плавная" прокрутка до указанной страницы.
Про использование фрагментов в ViewPager много расписывать не буду вот >>ССЫЛКА<< на FragmentPagerAdapter, используйте его. Там же есть пример по его использованию.
Про использование фрагментов в ViewPager много расписывать не буду вот >>ССЫЛКА<< на FragmentPagerAdapter, используйте его. Там же есть пример по его использованию.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 125. ViewPager
Вы знаете, я попробовал использовать пример по указанной ссылке, но ничего не работает. Eclipse ругается на множество ошибок.Про использование фрагментов в ViewPager много расписывать не буду вот >>ССЫЛКА<< на FragmentPagerAdapter, используйте его. Там же есть пример по его использованию.
В папке layout создал 2 файла R.layout.fragment_pager_list.xml и R.layout.fragment_pager.xml, в папке src создал новый класс FragmentPagerSupport.java
В чем может быть причина, как Вы думаете?
Re: Урок 125. ViewPager
а может надо было в папке Layout файлы называть не R.layout.filename.xml а просто filename.xml?
Re: Урок 125. ViewPager
мб отсутствует android.support.v4? Ну и фраза "Eclipse ругается на множество ошибок" ни о чём не говорит.
Re: Урок 125. ViewPager
Нет же, посмотрите ссылку, там файлы именно так и названы.Shtihl писал(а):а может надо было в папке Layout файлы называть не R.layout.filename.xml а просто filename.xml?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 125. ViewPager
Shtihl прав. Вы не правильно назвали файлы. R.layout.fragment_pager_list и R.layout.fragment_pager - это Id ресурсов.gorod писал(а):Нет же, посмотрите ссылку, там файлы именно так и названы.Shtihl писал(а):а может надо было в папке Layout файлы называть не R.layout.filename.xml а просто filename.xml?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.