Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 27
1

View во фрагментах

02.05.2016, 10:00. Показов 1207. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Чтобы прикрепить вид к layout в onCreateView мы раздуваем вид таким образом:
Java
1
View view = inflater.inflate(R.layout.fragment_mylayout, parent, false);
и в конце метода возвращаем
Java
1
return view;
А если я хочу использовать view в другом методе этого же класса, в который по определенным причинам не могу передать ссылку на view, как мне поступить? Да, я могу view сделать полем класса, но есть ли родные способы для решения этой проблемы? Можно использовать getView(), но при быстрой загрузке фрагмента (быстро нажимаю на кнопку с этим фрагментом) view теряется и вылетает ошибка по null. Так, собственно, есть ли родные способы, кроме getView() и создания view как поля класса, позволяющие прикрепить view из другого метода?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2016, 10:00
Ответы с готовыми решениями:

NavigationView на фрагментах
Всем привет! Нужен совет. Задача банальная. Приложение с NavigationView + Toolbar, доступ к...

Запутался в фрагментах и транзакциях с GoogleMaps?
есть активити, в которой по кнопке меняются фрагменты (их пока всего два), один из этих фрагментов...

Спрятать SearchView в некоторых фрагментах
Всем привет, такой вопрос: Есть NavigationDrawer В одном фрагменте реализован viewPager , там 2...

В чем разница (View view) и (View v)
Я только начинаю изучать программирование под андроид (до этого вобще программированием не...

11
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
02.05.2016, 10:48 2
Цитата Сообщение от dwayne Посмотреть сообщение
но при быстрой загрузке фрагмента (быстро нажимаю на кнопку с этим фрагментом) view теряется и вылетает ошибка по null.
код?
0
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 27
02.05.2016, 13:11  [ТС] 3
Цитата Сообщение от Паблито Посмотреть сообщение
код?
весь? Null выскакивает на строчке:
Java
1
TextView text = getView().findViewById(R.id.text);
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
02.05.2016, 13:12 4
ну да, весь, надо же понять что там написано и почему вылетает там, где не должно
0
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 27
02.05.2016, 13:23  [ТС] 5
Все стандартно.
Fragment:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        WeatherUpdater asyncTask = new WeatherUpdater();
        asyncTask.execute((String) url);
        asyncTask.delegate = this;
        return view = inflater.inflate(R.layout.fragment_main, container, false);
    }
 
public void publishFinish(String json) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
        WeatherData weatherData = gson.fromJson(json, WeatherData.class);
TextView text = (TextView) getView().text.setText("Температура: " + weatherData.main.temperature);
}
Activity:
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
private FragmentManager mFragmentManager;
private FragmentTransaction mFragmentTransaction;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
mFragmentManager = getFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.replace(R.id.content, new OneFragment());
        mFragmentTransaction.commit();
    }
 
@Override
    public void onClick(View v) {
        int id = v.getId();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        
        if (id == R.id.one) {
            mFragmentTransaction.replace(R.id.content, new OneFragment());
        } else if (id == R.id.two) {
            mFragmentTransaction.replace(R.id.content, new TwoFragment());
        } else if (id == R.id.three) {
            mFragmentTransaction.replace(R.id.content, new ThreeFragment());
        }
        mFragmentTransaction.commit();
    }
Разметка:
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
 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
 
<FrameLayout
            android:id="@+id/content"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="10"
            android:orientation="vertical" />
 <LinearLayout
            android:id="@+id/footer"
            android:layout_width="fill_parent"
            android:layout_height="60.0dip"
            android:gravity="center"
            android:orientation="horizontal">
 
            <ImageView
                android:id="@+id/one"
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:focusable="true"
                android:scaleType="center"
                android:visibility="gone" />
 
            <ImageView
                android:id="@+id/two"
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:background="?android:selectableItemBackground"
                android:focusable="true"
                android:scaleType="center"
                android:onClick="onClick" />
 
            <ImageView
                android:id="@+id/three"
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:background="?android:selectableItemBackground"
                android:focusable="true"
                android:scaleType="center"
                android:onClick="onClick" />
 
        </LinearLayout>
    </LinearLayout>
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
02.05.2016, 13:26 6
publishFinish откуда-то вызывается?
0
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 27
02.05.2016, 13:29  [ТС] 7
Паблито, из WeatherUpdater. Там все просто:
Java
1
2
3
4
5
6
7
8
9
public AsyncResponse delegate = null;
    @Override
    public void onPostExecute(Void args) {
        delegate.processFinish(json);
    }
 
    public interface AsyncResponse {
        void processFinish(String output);
    }
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
02.05.2016, 13:33 8
Цитата Сообщение от dwayne Посмотреть сообщение
весь? Null выскакивает на строчке:
TextView text = getView().findViewById(R.id.text);
и где эта строчка?

Цитата Сообщение от dwayne Посмотреть сообщение
TextView text = (TextView) getView().text.setText("Температура: " + weatherData.main.temperature);
а это что за бред?

потому я и просил весь код, но так как надо все вытягивать силой, то я пожалуй пойду дальше мимо этой темы
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
02.05.2016, 16:08 9
dwayne,

Так попробуйте.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private TextView text;
 
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        WeatherUpdater asyncTask = new WeatherUpdater();
        asyncTask.execute((String) url);
        asyncTask.delegate = this;
        text = (TextView) view.findViewById(R.id....);
        return view;
    }
 
public void publishFinish(String json) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
        WeatherData weatherData = gson.fromJson(json, WeatherData.class);
         text.setText("Температура: " + weatherData.main.temperature);
}
Цитата Сообщение от dwayne Посмотреть сообщение
TextView text = (TextView) getView().text.setText("Температура: " + weatherData.main.temperature);
Это вообще ахинея какая-то
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
04.05.2016, 17:31 10
Лучший ответ Сообщение было отмечено dwayne как решение

Решение

Цитата Сообщение от dwayne Посмотреть сообщение
Можно использовать getView()
Как раз сегодня с этим столкнулся.
http://stackoverflow.com/quest... -fragment:
"Note: it's works only after onCreateView(). So, you can't use this in onCreate()".
Таким образом, у вас неправильно написан код, поскольку вы используете getView() при вызове из класса, который вызывается из onCreateView(). Логично, что он будет null. В этом случае можно, например, внутрь него передать этот самый view. Тогда не придётся использовать глобальные переменные, про которые написал YuraAAA.
1
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
04.05.2016, 20:13 11
CoolMind, передавать view внутрь asynctask - не хорошо
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
06.05.2016, 14:19 12
YuraAAA, честно говоря, не знаю. Может быть, но это же можно отнести и к кнопкам, надписям и т.д. Или я неправильно понял.
0
06.05.2016, 14:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2016, 14:19
Помогаю со студенческими работами здесь

Можно ли рисовать лупу не во всех фрагментах?
Недавно подключил ActionBar с поиском, использовал такой тьюториал:...

Что использовать во фрагментах вместо getIntent() ?
Всем привет! Пытаюсь из одной активности во фрагмент передать данные. Метод...

Как из Активити получить ссылки на элементы, которые находятся во фрагментах?
Всем привет. Гуглил, не нашел. Как из Активити получить ссылки на элементы, которые находятся во...

Как добавить динамически в ToolBar виджет SearchView в нужных фрагментах
У меня есть Toolbar в MainActivity и нужно получить доступ к этому ToolBar во фрагменте...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru