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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
#1

Fragment and context - Программирование Android

11.01.2013, 14:33. Просмотров 2387. Ответов 15
Метки нет (Все метки)

Есть шерлокбар.

Два таба у него.

Каждому табу привязан свой фрагмент через tabListener.

Хочу чтобы в первом табе высвечивались параметры соседних базовых станций, соответственно нужен TelephonyManager.

Создаю его:

TelephonyManager manage = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

Но контекст в фрагменте не работает.

Есть ли способы получить контекст в классе фрагмента (у меня несколько фрагментов и каждый в своем ява файле-класса)?

Я же мыслю правильно - в каждом фрагменте по идее можно накодить что угодно, а потом закинуть его в куда-либо (таб, активити)?

Добавлено через 16 минут
Голова начинает зависать!

Проблема вроде решена getActivity().

Не подскажете, как мне в пять TextView одного фрагмента программно вставлять текст, findViewById не фурычит?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 14:33     Fragment and context
Посмотрите здесь:

Объект Context - Программирование Android
Проблема такая: Я создаю новый класс в отдельном файле для работыSQLite и в нем мне нужен Объект Context, если я наследую Activity ...

Context - ошибка - Программирование Android
Здравствуйте! Программа должна выводить карту из google. Использую Picasso как самое рациональное решение. При импользовании Picasso надо...

Анимация Fragment - Программирование Android
Здравствуйте, такой вопрос. как прикрутить эту анимацию: <?xml version="1.0" encoding="utf-8"?> <alpha ...

OnActivityResult For Fragment - Программирование Android
Помогите решить проблему. У меня есть ListFragment который отображает фотки из бд и кнопка которая запускает стандартное приложения для...

Вызов Fragment - Программирование Android
Здравствуйте, есть такая задача. есть main класс ActionBarActivity который из обычно класса можно вызывать как...

TextView and Fragment - Программирование Android
Доброго времени суток . Очень странная проблема, в классе extends Fragment есть кнопка и текст вью , при нажатии на кнопку вызываю ...

Работа с Fragment - Программирование Android
Ребят изучаю андройд с недавних пор, дошел до фрагментов, но не особо их понимаю, можете кому не лень норм инфы накидать на эту тему?)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
11.01.2013, 14:47     Fragment and context #2
Java
1
  ((TextView)getView().findViewById(R.id.textView1)).setText(Integer.toString(commonTime));
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
12.01.2013, 12:08  [ТС]     Fragment and context #3
Спасибо большое!

Добавлено через 20 часов 52 минуты
Цитата Сообщение от flashok Посмотреть сообщение
((TextView)getView().findViewById(R.id.textView1)).setText(Integer.toString(commonTime));
Не могу никак понять смысл LayoutInflater.

Вот есть у меня layout файл one.xml в нем LinearLayout в котором два TextView.

Вот я во фрагменте пишу:

Java
1
2
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
           {   return inflater.inflate(R.layout.one, null); }
Я на экране увижу 2 TextView.

Inflate возвращает view. Все было бы логично, если бы у меня в моем layout-файле был бы один TextView, inflater бы взял его из нашего файла и разместил туда куда мы скажем.

Но в параметре у него мы же пишем наш лэйаут, а в нем у нас есть ViewGroup (наш LinearLayout), что с ним произойдет? И у нас 2 TextView, что с ними происходит?

И метод getView(), как написано в инструкции, возвращает root view. Тогда что у нас является родителем после inflater?
silentnuke
Android Programmer
138 / 139 / 5
Регистрация: 08.12.2010
Сообщений: 421
13.01.2013, 13:01     Fragment and context #4
Цитата Сообщение от Klafe Посмотреть сообщение
Спасибо большое!

Inflate возвращает view. Все было бы логично, если бы у меня в моем layout-файле был бы один TextView, inflater бы взял его из нашего файла и разместил туда куда мы скажем.

Но в параметре у него мы же пишем наш лэйаут, а в нем у нас есть ViewGroup (наш LinearLayout), что с ним произойдет? И у нас 2 TextView, что с ними происходит?
ViewGroup extends View
что тут непонятного, вернет всю иерархию т.е. LinearLayout, который содержит дочерние элементы.


Цитата Сообщение от Klafe Посмотреть сообщение
И метод getView(), как написано в инструкции, возвращает root view. Тогда что у нас является родителем после inflater?
в вашем случае LinearLayout и будет root view.
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 15:47  [ТС]     Fragment and context #5
Цитата Сообщение от flashok Посмотреть сообщение
Код Java(TM) 2 Platform Standard Edition 5.01
* ((TextView)getView().findViewById(R.id.textView1)).setText(Integer.toString(commonTime));
Почему-то у меня не работает!

Постоянно запариваюсь со всякими мелочами!

У меня есть фрагмент:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class FragmentOne extends SherlockFragment {
 
    
    @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frone, null);
        return view; 
        }
    
    public void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        
      }
R.layout.frone - здесь у меня LinearLayout, а в нем TextView.

Хочу в этот TextView вставить текст.

Получается только при написании
Java
1
2
        TextView Text = (TextView) view.findViewById(R.id.text);
        Text.setText("ПРИВЕТ");
в методе onCreateView(). Причем именно view.findViewById(R.id.text), а getView().findViewById(R.id.text) не работает (хотя по идее должна).

А я хочу в onCreate() выполнять код и по итогам этого кода менять текст. Но ни view.findViewById(R.id.text), ни getView().findViewById(R.id.text) в onCreate() не работает.

Получается, что я не могу менять UI не из UI потока???

А в onCreateView() у меня что UI поток???

Завис я че-то!
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
16.01.2013, 16:00     Fragment and context #6
если у вас фрагмент, этого кода не должно быть, он используеться, если у вас активити
Код
public void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        
      }
у вас точно фрагмент ???

в SherlockFragment у вас точно написано extends Fragment (возможно у вас активити)

у вас путаница где фрагмент, а где активити
и в коде мешанина


Получается, что я не могу менять UI не из UI потока???
да это так
но у вас по коду этого нет


А в onCreateView() у меня что UI поток???
да
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 16:13  [ТС]     Fragment and context #7
Что за борода, в onResume() все работает???
А как же onCreate()??

Добавлено через 4 минуты
Цитата Сообщение от flashok Посмотреть сообщение
у вас точно фрагмент ???
Точно фрагмент.

Вот так: public class FragmentOne extends SherlockFragment

Java
1
2
3
public void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
В фрагментах тоже имеется.

Добавлено через 6 минут
Я так понимаю что onCreate(Bundle savedInstanceState) в фрагментах нужен чтобы сохранялась всякая борода когда фрагмент на паузе или еще что (в developer(е) пером пишут).
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
16.01.2013, 16:15     Fragment and context #8
да есть, я ошибся
я просто его ни кого не использовал
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 16:17  [ТС]     Fragment and context #9
Цитата Сообщение от flashok Посмотреть сообщение
я просто его ни кого не использовал
Я вообще не понимаю зачем он нужен если в нем простецкие, но очень нужные вещи не работают!
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.01.2013, 16:20     Fragment and context #10
что значит "не работает"? не компилится? екзепшен?
до или после super.onCreate(savedInstanceState); пытаетесь вставить текст?
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 16:25  [ТС]     Fragment and context #11
Цитата Сообщение от V0v1k Посмотреть сообщение
до или после super.onCreate(savedInstanceState); пытаетесь вставить текст?
Теперь и до, и после.

Прога не запускается на телефоне.

Когда уберу TextView Text = (TextView) view.findViewById(R.id.text), все запускается.

TextView Text = (TextView) view.findViewById(R.id.text) работает в onResume() и в onCreateView()!
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.01.2013, 16:26     Fragment and context #12
Цитата Сообщение от Klafe Посмотреть сообщение
Прога не запускается на телефоне.
что значит не запускается? вы явно чего-то не договариваете. не заставляйте меня вытягивать с вас по одному слову...
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 16:40  [ТС]     Fragment and context #13
Только в onResume() заменить view на getView().

Добавлено через 50 секунд
Цитата Сообщение от V0v1k Посмотреть сообщение
что значит не запускается? вы явно чего-то не договариваете. не заставляйте меня вытягивать с вас по одному слову...
Ща логи сделаю!

Добавлено через 9 минут
01-17 00:36:08.191: W/dalvikvm(8911): threadid=1: thread exiting with uncaught exception (group=0x400259f8)
01-17 00:36:08.191: E/AndroidRuntime(8911): FATAL EXCEPTION: main
01-17 00:36:08.191: E/AndroidRuntime(8911): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kaa.actionbarsherlock/com.kaa.actionbarsherlock.MainActivity}: java.lang.NullPointerException
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.ActivityThread.access$2300(ActivityThread.java:135)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.os.Handler.dispatchMessage(Handler.java:99)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.os.Looper.loop(Looper.java:144)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.ActivityThread.main(ActivityThread.java:4937)
01-17 00:36:08.191: E/AndroidRuntime(8911): at java.lang.reflect.Method.invokeNative(Native Method)
01-17 00:36:08.191: E/AndroidRuntime(8911): at java.lang.reflect.Method.invoke(Method.java:521)
01-17 00:36:08.191: E/AndroidRuntime(8911): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-17 00:36:08.191: E/AndroidRuntime(8911): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-17 00:36:08.191: E/AndroidRuntime(8911): at dalvik.system.NativeStart.main(Native Method)
01-17 00:36:08.191: E/AndroidRuntime(8911): Caused by: java.lang.NullPointerException
01-17 00:36:08.191: E/AndroidRuntime(8911): at com.kaa.actionbarsherlock.FragmentOne.onCreate(FragmentOne.java:31)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:834)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1211)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.Activity.performStart(Activity.java:3822)
01-17 00:36:08.191: E/AndroidRuntime(8911): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2760)
01-17 00:36:08.191: E/AndroidRuntime(8911): ... 11 more

Логи услышали, что я хочу их сделать и категорически отказывались показываться!!!!

Добавлено через 1 минуту
TextView LACText = (TextView) getView().findViewById(R.id.LAC) - без этого в onCreate все работает

Добавлено через 54 секунды
это 31-ая строка

Добавлено через 48 секунд
Чес слов ничего не скрываю!!!)))
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.01.2013, 16:53     Fragment and context #14
ну, похоже на то, что onCreate происходит раньше чем onCreateView, соответственно getView() в методе onCreate возвращает null и вы получаете NullPointerException

Добавлено через 1 минуту
может будете делать это в методе onCreateView? вроде для этого он и есть)
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
17.01.2013, 09:51  [ТС]     Fragment and context #15
Цитата Сообщение от V0v1k Посмотреть сообщение
может будете делать это в методе onCreateView? вроде для этого он и есть)
Можно конечно и в нем делать, но само название этого метода подразумевает create view, а сам код который должен выполняться в фрагменте мне кажется будет правильнее реализовывать в методе onCreate.

Мне просто нужно чтобы выполнялся определенный код, а по его итогам менялись TextView.

Добавлено через 4 часа 1 минуту
Вывод: в фрагментах весь код пишем в onCreate (на обязательно) но, то, что хотим вывести на экран сохраняем в переменные класса, а затем эти переменные выводим куда хотим, но в onCreateView или в onResume, короче после или в onCreateView.

Добавлено через 1 час 7 минут
Цитата Сообщение от V0v1k Посмотреть сообщение
до или после super.onCreate(savedInstanceState); пытаетесь вставить текст?
А как правильно? И в методе, например, onPause() кодить после super.onPause() или до?

В инструкции написано, что сначала нужно вызывать метод суперкласса super.onPause(), но вот зачем? Если мы и так определяем что нам делать в onPause()?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 13:18     Fragment and context
Еще ссылки по теме:

DialogFragment в Fragment - Программирование Android
можно ли визивать DialogFragment с Fragment???

Reload Fragment - Программирование Android
Такая проблема, по нажатию кнопки поиска у меня возвращается список, под который на фрагменте создаются layout's. Пытаюсь сделать так,...

MapFragment в Fragment - Программирование Android
Как получить MapFragment который находится в Fragment? Сейчас использую такой способ: MapFragment mapFragment =...

SwipeRefreshLayout + Fragment - Программирование Android
Имеется mainActivity c <android.support.v4.widget.SwipeRefreshLayout ...

set и get из fragment - Программирование Android
Здравствуйте! Есть 3 таба которые реализованы с помощью fragment. На табах есть кнопки, текстовые поля и т.д. Подскажите пожалуйста, как...


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

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.01.2013, 13:18     Fragment and context #16
Цитата Сообщение от Klafe Посмотреть сообщение
Можно конечно и в нем делать, но само название этого метода подразумевает create view, а сам код который должен выполняться в фрагменте мне кажется будет правильнее реализовывать в методе onCreate.
Мне просто нужно чтобы выполнялся определенный код, а по его итогам менялись TextView.
Добавлено через 4 часа 1 минуту
Вывод: в фрагментах весь код пишем в onCreate (на обязательно) но, то, что хотим вывести на экран сохраняем в переменные класса, а затем эти переменные выводим куда хотим, но в onCreateView или в onResume, короче после или в onCreateView.
ну, onCreateView первое место где доступно view, а onResume может выполняется множество раз.

Цитата Сообщение от Klafe Посмотреть сообщение
А как правильно?
обычно пишут после вызова метода сеперкласса.
Yandex
Объявления
17.01.2013, 13:18     Fragment and context
Ответ Создать тему
Опции темы

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