Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/103: Рейтинг темы: голосов - 103, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 32

Обращение к элементам фрагмента из активити

12.10.2016, 02:08. Показов 21725. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть необходимость в программе менять значение TextView находящегося во фрагменте.

Фрагмент должен выводится в контейнер. И затем я должен найти элементы и изменить их. Если делать через динамический контейнер, то ничего не получается, элементы не обнаруживаются.

Java
1
2
3
4
5
    <FrameLayout
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        android:id="@+id/fragCont"/>
А если делать вот так, то элементы успешно обнаруживаются, но как я понимаю, данный способ подходит только для статических объектов, так как если помещать в такой контейнер, то я потом не могу менять фрагменты в контейнере

Java
1
2
3
4
5
6
7
8
<fragment
    android:id="@+id/fragCont"
    android:name="com.leonov.smartdiagfrag.Fragment1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    tools:layout="@layout/fragment1">
</fragment>
Фрагмент кода из main.class. Работает только со статичным контйнером.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    private void initFrag1() {
        TextView textBtrInfo = (TextView) findViewById(R.id.textBtrInfo);
        TextView textChrgInfo = (TextView) findViewById(R.id.textChrgInfo);
 
        frag1 = new Fragment1();
        fTrans = fManager.beginTransaction();
        fTrans.add(R.id.fragCont, frag1);
        fTrans.commit();
 
        textBatteryInfo = (TextView) findViewById(R.id.textBatteryInfo); //перестает работать с frame layot (null)
        textBatteryTemperature = (TextView) findViewById(R.id.textBatteryTemperature);//перестает работать с frame layot (null)
        textBatteryInfo.setText("Заряд батареи");
        textBatteryTemperature.setText("Температура батареи");
        textBtrInfo.setText(" " + getBatteryTemperatute(this).toString());
        textChrgInfo.setText(" " + getBatteryLevel(this).toString());
  }

Поясните новичку, уже два дня курю тему по фрагментам, никак не могу понять.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2016, 02:08
Ответы с готовыми решениями:

Обращение к элементам другой Активити
Есть xml-файл главной активити main.xml который содержит поле ввода &lt;EditText android:id=&quot;@+id/edPhone&quot; ...

Обращение к элементам активити из другого класса
Добрый день. Ломаю голову битый час, все не могу понять, почему у меня не получается. Опишу по шагам. Создал проект андроид (в эклипсе),...

Обращение к View элементам фрагмента
Добрый день. Нужна помощь, уже не знаю что делать. Имеется три идентичных фрагмента с одним TextView (id = textview1). Имеется...

9
111 / 111 / 43
Регистрация: 24.05.2015
Сообщений: 329
12.10.2016, 08:05
https://www.youtube.com/watch?v=DsVAP2F9c1U
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 32
12.10.2016, 12:11  [ТС]
Смотрел уже, и урок от Девколибри. Не срабатывает.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.10.2016, 12:19
по-хорошему надо вызывать какой-нибудь метод на своем фрагменте и передавать туда строку или что там
а фрагмент уже сам должен решать куда и как отобразить эту строку

в методе фрагмента уже надо брать текствью и писать туда строку
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 32
12.10.2016, 12:43  [ТС]
Просто я решил это реализовать так, не знаю правильно или нет.
У меня есть главный MainActivity, и 3 фрагмента Fragment1, Fragment2, Fragment3.

Весь код будет выполняться в MainActivity c передачей данных во фрагмент. Так же не понимаю как корректно заставить Фрагмент1(так как он по умолчанию главный) сразу загружаться при старте системы. Видимо через транзакцию и вызов комит? Остальные фрагменты должны инициализироваться каждый раз при вызове их пункта меню из NavigationView.

Т.е. код такой
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        /*Начало родного кода*/
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();
 
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        View navHeaderMain = navigationView.inflateHeaderView(R.layout.nav_header_main);
        drawerItemModel = (TextView) navHeaderMain.findViewById(R.id.drawerHdrItemModel);
        tvHeaderModel = (TextView) navHeaderMain.findViewById(R.id.tvHeaderModel);
        tvHeaderPO = (TextView) navHeaderMain.findViewById(R.id.tvHeaderPO);
        tvHeaderOnline = (TextView) navHeaderMain.findViewById(R.id.tvHeaderOnline);
        navigationView.setNavigationItemSelectedListener(this);
         /*Конец родного кода*/
 
         /*Начало моего кода*/
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
        initSensList();
        fManager = getSupportFragmentManager();
        initFrag1(); //пытаюсь вызвать фрагмент при старте системы, верно?
 /*Конец моего кода*/
    }
 
 
    public boolean onNavigationItemSelected(MenuItem item) {
 
        int id = item.getItemId();
 
        if (id == R.id.nav_diag) {
            initFrag2();
            fTrans.replace(R.id.fragCont, frag2);
            fTrans.commit();
        } else if (id == R.id.nav_mTouch) {
 
        } else if (id == R.id.nav_slideshow) {
 
        } else if (id == R.id.nav_manage) {
 
        } else if (id == R.id.nav_share) {
 
        } else if (id == R.id.nav_send) {
 
        } else if (id == R.id.nav_main){
            initFrag1();
            fTrans.replace(R.id.fragCont, frag1);
            fTrans.commit();
        }
 
 
    private void initFrag1() {
        TextView textBtrInfo = (TextView) findViewById(R.id.textBtrInfo);
        TextView textChrgInfo = (TextView) findViewById(R.id.textChrgInfo);
 
        frag1 = new Fragment1();
        fTrans = fManager.beginTransaction();
        fTrans.add(R.id.fragCont, frag1);
        fTrans.commit();
 
        textBatteryInfo = (TextView) findViewById(R.id.textBatteryInfo);
        textBatteryTemperature = (TextView) findViewById(R.id.textBatteryTemperature);
        textBatteryInfo.setText("Заряд батареи");
        textBatteryTemperature.setText("Температура батареи");
        textBtrInfo.setText(" " + getBatteryTemperatute(this).toString());
        textChrgInfo.setText(" " + getBatteryLevel(this).toString());
 
 
  }
Добавлено через 12 минут
Кто сможет по skype дать нужный совет? Экран покажу, если нужно дам удаленный доступ.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.10.2016, 12:45
Цитата Сообщение от MrArty Посмотреть сообщение
textBatteryInfo = (TextView) findViewById(R.id.textBatteryInfo); textBatteryTemperature = (TextView) findViewById(R.id.textBatteryTemperature ); textBatteryInfo.setText("Заряд батареи"); textBatteryTemperature.setText("Температ ура батареи"); textBtrInfo.setText(" " + getBatteryTemperatute(this).toString()); textChrgInfo.setText(" " + getBatteryLevel(this).toString());
Цитата Сообщение от MrArty Посмотреть сообщение
/пытаюсь вызвать фрагмент при старте системы, верно? /*Конец моего кода*/
если это все элементы из разметки фрагмента то их надо там и искать - во фрагменте, в onCreateView
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 32
12.10.2016, 12:47  [ТС]
Верно, это элементы из фрагмента. Когда этот фрагмент я помещаю в статический контейнер <fragment> то они находятся именно таким способом. Почему не работает с динамическим?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.10.2016, 12:55
Цитата Сообщение от MrArty Посмотреть сообщение
статический контейнер
я не знаю таких слов

Цитата Сообщение от MrArty Посмотреть сообщение
очему не работает с динамическим
потому что там не код, а каша
выше я уже написал что искать их надо не в активити

XML
1
2
3
4
5
6
7
8
<fragment
    android:id="@+id/fragCont"
    android:name="com.leonov.smartdiagfrag.Fragment1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    tools:layout="@layout/fragment1">
</fragment>
это лучше убрать из контейнера фрагментов и при старте активити помещаться туда фрамент через транзакцию
особо разницы нет, но транзакция - это пара строк кода и в разметке будет чище
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 32
12.10.2016, 12:59  [ТС]
Ну как же. По всем урокам с фрагментами есть два типа взаимодействия с фрагментами. Статическим способом, поместив фрагмент сразу в <fragment> либо динамическим способом, поместим фрагмент допустим в <LinearLayout>.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.10.2016, 13:04
они находятся потому что фрагмент при inflate разметки активити там есть тоже и можно найти вьюшки фрагмента по id
но так не делается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2016, 13:04
Помогаю со студенческими работами здесь

Переход из фрагмента одной активити в другую активити
Как реализовать нажатие на кнопку чтобы из фрагмента одной активити попасть в другую активити?

Взаимодействие Активити и Фрагмента
Что есть. 1. Фрагмент который нажатием на кнопку запускает активность, которая запрашивает от пользователя данные. Активность с темой...

Переход по кнопке с фрагмента на активити
Парюсь с этим очень долго, никак не могу найти как осуществить переход по кнопке с фрагмена на активити, можно пожалуйста пример кода.

Возврат значений из фрагмента в активити
День добрый, недавно заинтересовался разработкой под андроид и практически сразу встал банальный вопрос: как вернуть выбранные...

Активити отрабатывает быстрее фрагмента
Непонятно поведение фрагмента (FragmentPagerAdapter). Вызываю активити из уведомления, из onCreate вызываю метод meUpdate, где хочу...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru