Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 297

Как получить доступ к фрагментам?

06.04.2018, 08:07. Показов 913. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь написать приложение. в которм будет несколько страниц со списками объектов. Объект из списка должен редактироваться. Для этого хочу, чтобы по кику на объкте вызывался соответствующий редактор. На главное странице использую TabLayout.

Разметка выглядит вот так:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
 
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
 
            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMode="scrollable"
                app:tabGravity="fill"/>
        </android.support.design.widget.AppBarLayout>
 
        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
    </LinearLayout>
</android.support.design.widget.CoordinatorLayout>
Фрагменты заношу во ViewPager через соответствующий адаптер. Фрагменты отображаются нормально. Переключение страниц проходит нормально, и через клики по заголовкам и с помощью протяжки влево или вправо. Клик по элементу списка передаётся в MainActivity, но вот дальше ничего не получается: хочу заменить фрагмент со списком на фрагмент с редактором, но (Support)FramentManager не видит фрагменты.

Собственно, вот так выглядит код MainActivity
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
77
78
import android.support.v4.app.FragmentManager;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
 
import Containers.Fragment1ListItem;
 
public class MainActivity extends AppCompatActivity implements IFragment1List{
    // When requested, this adapter returns a DemoObjectFragment,
    // representing an object in the collection.
    Toolbar toolBar;
    TabLayout tabLayout;
    PagerAdapter mPagerAdapter;
    ViewPager mViewPager;
    private static int tabsCount = 6;
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        toolBar = findViewById(R.id.toolbar);
        setSupportActionBar(toolBar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
        mViewPager = findViewById(R.id.pager);
        setupViewPager(mViewPager);
 
        tabLayout = findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);
        FragmentManager fm = getSupportFragmentManager();
        Fragment1ListFragment fragment1ListFragment = (Fragment1ListFragment) fm.findFragmentById(R.id.fragment1ListFragment);
        int i = 0; i++;
    }
 
    private void setupViewPager(ViewPager viewPager) {
        PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
        pagerAdapter.addFrag(new Fragment1ListFragment(), getResources().getString(R.string.fragment1_list_title));
        pagerAdapter.addFrag(new DndListFragment(), getResources().getString(R.string.fragment2_list_title));
        pagerAdapter.addFrag(new DndListFragment(), getResources().getString(R.string.fragment3_list_title));
        pagerAdapter.addFrag(new DndListFragment(), getResources().getString(R.string.fragment4_list_title));
        pagerAdapter.addFrag(new DndListFragment(), getResources().getString(R.string.fragment5_list_title));
        viewPager.setAdapter(pagerAdapter);
        FragmentManager sfm = getSupportFragmentManager();
        DndListFragment alf = (DndListFragment)sfm.findFragmentById(R.id.dndListFragment);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        return super.onOptionsItemSelected(item);
    }
 
    @Override
    public void loadFragment1EditorFragment(Fragment1ListItem ali) {
        FragmentManager fm = getSupportFragmentManager();
        Fragment1ListFragment src = (Fragment1ListFragment)fm.findFragmentById(R.id.fragment1ListFragment);
        Fragment1EditorFragment dst = (Fragment1EditorFragment)fm.findFragmentById(R.id.fragment1EditorFragment);
        fm.beginTransaction().replace(R.id.pager, dst).commit();
        /*
        * TODO:Replace the fragment Fragment1List with Fragment1Editor and pass the Fragment1 params
        */
    }
}
В методе loadFragment1EditorFragment пытаюсь заменить фрагмент со списком объёктов на фрагмент редактора этих объектов, но FragmentManager не видит фрагменты, и всегда возвращает null.

В чём дело? Как доступиться до фрагментов?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2018, 08:07
Ответы с готовыми решениями:

Как получить доступ к устаревшим фрагментам после чистки кеша
Доброго времени суток. Во время написания приложения возникла данная проблема. Возникает она когда пользователь свернув мое приложение...

Как получить доступ к сервису?
У меня в приложении есть сервис, который запускается вместе с приложением. Также я создал класс, который наследуется от BroadcastReceiver...

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

5
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
06.04.2018, 09:23
Потому что ты ищешь фрагмент на главной форме.
Этот метод должен в адаптере быть расположен.
0
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 297
06.04.2018, 09:48  [ТС]
А в каком месте? И как это сделать? Адаптер такого метода не знает, насколько я понял.
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
06.04.2018, 10:08
Цитата Сообщение от Abejon Посмотреть сообщение
Фрагменты заношу во ViewPager через соответствующий адаптер
Тут мне только гадать
0
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 297
06.04.2018, 10:23  [ТС]
Вот код адаптера:

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
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.SwitchCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.TextView;
 
import java.util.List;
 
import Containers.Fragment1ListItem;
import Containers.ContainerHelper;
 
public class Fragment1ListAdapter extends ArrayAdapter<Fragment1ListItem> {
 
    private LayoutInflater mInflater;
    private int mLayout;
    private List<Fragment1ListItem> mRepeats;
 
    public Fragment1ListAdapter(@NonNull final Context context, final int resource, final List<Fragment1ListItem> fragment1List) {
        super(context, resource, fragment1List);
        mRepeats = fragment1List;
        mLayout = resource;
        mInflater = LayoutInflater.from(context);
    }
 
    public View getView(int position, View convertView, ViewGroup parent) {
 
        View view = mInflater.inflate(this.mLayout, parent, false);
 
        final Fragment1ListItem fragment1ListItem = mRepeats.get(position);
        SwitchCompat isActive = view.findViewById(R.id.fragment1ItemIsActive);
        isActive.setChecked(fragment1ListItem.getFragment1Clock().getIsActive());
        isActive.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton src, boolean isChecked) {
                fragment1ListItem.getFragment1Clock().setIsActive(isChecked);
            }
        });
        TextView fragment1Name = view.findViewById(R.id.fragment1ItemName);
        fragment1Name.setText(fragment1ListItem.getFragment1Clock().getName());
    }
}
Писал по примеру, найденному на просторах Инета, сейчас уже и не скажу точно на каком сайте.
0
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 297
09.04.2018, 08:41  [ТС]
Фрагмент, который мне нужен был - pager, расположенный в форме main.
Фрагменты, создаваемые вот так:
Java
1
        pagerAdapter.addFrag(new Fragment1ListFragment(), getResources().getString(R.string.fragment1_list_title));
имеют идентификатор, равный значению по умолчанию - 0, поэтому метод findFragmentById() и не находит ничего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2018, 08:41
Помогаю со студенческими работами здесь

Как получить доступ к тексту SMS?
Тость хочу чтоб когда выскакивает меню набора текста SMS я мог бы туда при нажатие в какую - нибуть область или ещё как, пока это не важно,...

Как получить доступ к элементу в папке по имени?
Есть, допустим, следующий код Bitmap srcBitmapLocal = BitmapFactory.decodeResource(getApplicationContext().getResources(), ...

Как получить доступ к методам объекта класса наследуемого от Activity, когда он выводится во вкладку
В главном Активити создаются вкладки на котовые выводятся другие активити. @Override public void onCreate(Bundle...

Action Bar в Activity для навигации по фрагментам в TabHost-е
Здравствуйте. Есть главная Activity наследуемая от TabHost. Использую TabHost специально, чтобы вкладки не свайпились, т.к. на одной из...

Как получить доступ к ftp, http и ssh по VPN через роутер, если есть доступ к samba?
Есть системник с Ubuntu Server 12.04. Он находится за роутером. На системнике стоит PPTP VPN. На роутере проброшены vpn порты на системник,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
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 Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru