Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
#1

Активити отрабатывает быстрее фрагмента - Программирование Android

11.03.2015, 11:47. Просмотров 330. Ответов 3
Метки нет (Все метки)

Непонятно поведение фрагмента (FragmentPagerAdapter).
Вызываю активити из уведомления, из onCreate вызываю метод meUpdate, где хочу изменить TextView в итемах ListView.
Java
1
2
3
4
View view = (View) pager.getChildAt(0); 
ListView listview = (ListView) view.findViewById(R.id.listView1);
TextView textview = (TextView) listview.findViewWithTag(0);
textview.setText("новый текст");
А view = null. Соответственно ошибка.
Придумал костыль в виде Thread, где циклом жду пока все не станет !null.
Java
1
2
3
4
5
6
7
8
while ((View) pager.getChildAt(0) == null) { }
view = (View) pager.getChildAt(0);
while ((ListView) view.findViewById(R.id.listView1) == null) { }
listview = (ListView) view.findViewById(R.id.listView1);
for (int i = 0; i < listview.getCount(); i++) {
    while ((TextView) listview.findViewWithTag(i) == null) { } // тут иногда тоже крашит.
}
meUpdate();
Кто сталкивался с таким?
Я так понимаю, активити отрабатывает быстрее, чем прорисуются все фрагменты? Может без костыля можно обойтись?

Добавлено через 7 минут
Или придется вызывать метод из фрагмента, через активити не реально сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2015, 11:47     Активити отрабатывает быстрее фрагмента
Посмотрите здесь:

Обращение к элементам фрагмента из активити - Программирование Android
Есть необходимость в программе менять значение TextView находящегося во фрагменте. Фрагмент должен выводится в контейнер. И затем я...

Как нажать кнопку основого активити из фрагмента - Программирование Android
Здравствуйте! Столкнулся с такой проблемой, что получается в фрагменте добраться до кнопки, которая в разметке самого фрагмента. Но...

Как открыть активити с фрагмента используя кнопку? - Программирование Android
У меня есть tab activity в ней есть фрагменты, так же есть второе tab activity и мне нужно с фрагмента из первого активити перейти во...

Повторное создание фрагмента внутри фрагмента ViewPager - Программирование Android
Доброго времени суток! Использую внутри фрагмента элемент ViewPager, который сам внутри содержит еще два фрагмента-вкладки. При первом...

Не отрабатывает onDestroy() - Программирование Android
Всем привет, как то я подымал подобный вопрос, но не спрашивал как это можно фиксануть, если можно. Так вот, если приложения свернуть и...

Не отрабатывает MainActivity - Программирование Android
Здравствуйте! В общем, в моем приложении есть два Frament и Main Activity. В Main Activity прописано меню Navigation Drawer, а фрагменты...

Не корректно отрабатывает метод onReceive() - Программирование Android
Имеется BroadcastReceiver, который должен отработать, если будет утеряно подключение к WiFi. Как должно быть: Приложение работает -...

Открыть второй активити - Программирование Android
Раньше проблем с открытием второго активити через нажатие на кнопку не было. Создал xml, class, в манифесте прописал. Что-то упустил?

Не создается автоматическая активити - Программирование Android
Всем привет! Пытаюсь добавить в свое приложение кнопки соц.сетей - которые &quot;расскажи о нас друзьям&quot;. За основу взял вполне рабочий...

Управление фрагментом из активити - Программирование Android
Добрый день! Имею несколько фрагментов, в которых выполняются некоторые действия, то итогу которых формируется результат. Фрагменты...

Активити пропала 0_0 - Программирование Android
Здравствуйте коллеги! всех с профессиональным праздником! У меня такая проблема: запускаю приложение, у меня запускается предположим...

Про активити и линию - Программирование Android
1. (см. вложение) Обязательно ли для каждого раздела меню создавать новое активити? (при нажатии открывается отдельное окно кк в whatsapp) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
11.03.2015, 13:51     Активити отрабатывает быстрее фрагмента #2
Конечно нужно делать это из самого фрагмента.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
11.03.2015, 14:18  [ТС]     Активити отрабатывает быстрее фрагмента #3
Цитата Сообщение от Gabberr Посмотреть сообщение
Конечно нужно делать это из самого фрагмента.
А если их несколько фрагментов, т.к. они грузятся в PagerAdapter? Т.е. вызов фрагмента идет несколько раз.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
11.03.2015, 14:57     Активити отрабатывает быстрее фрагмента #4
Я так понимаю нужно чтоб при старте активити у первого фрагмента в пейджере поменялся текст например?
Если в пейджере все фрагменты одного типа, можно отличать их по номеру, типа того:
пейджер
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
    }
 
  }


фрагмент
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class PageFragment extends Fragment {
  
  static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
  
  int pageNumber;
 
  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 View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment, null);
    
    TextView tvPage = (TextView) view.findViewById(R.id.tvPage);
    tvPage.setText("Page " + pageNumber);
    
    return view;
  }
}


и в зависимости от позиции отрисовать фрагмент по своему.
Yandex
Объявления
11.03.2015, 14:57     Активити отрабатывает быстрее фрагмента
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru