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

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

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

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

11.01.2013, 14:33. Просмотров 2434. Ответов 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 (Программирование Android):

Обновление fragment из другого fragment - Программирование Android
Добрый вечер всем!! Подскажите пожалуйста как обновить один фрагмент из другого (а именно TextView и ArrayAdapter)?

Fragment - Программирование Android
Eсть Activity состоящий из ActionBar в котором две вкладки, каждая из них это Fragment. Не пойму как при переходе ко второй вкладке...

findViewById и Fragment - Программирование Android
Пытаюсь использовать getView().findViewById Но не работает

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

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

Fragment и RoboSpice - Программирование Android
Всем доброго времени суток, возникла проблема при использовании асинхронного запроса с помощью RoboSpice и инициализации фрагмента....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
11.01.2013, 14:47 #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  [ТС] #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
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
13.01.2013, 13:01 #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  [ТС] #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 #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  [ТС] #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 #8
да есть, я ошибся
я просто его ни кого не использовал
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 16:17  [ТС] #9
Цитата Сообщение от flashok Посмотреть сообщение
я просто его ни кого не использовал
Я вообще не понимаю зачем он нужен если в нем простецкие, но очень нужные вещи не работают!
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.01.2013, 16:20 #10
что значит "не работает"? не компилится? екзепшен?
до или после super.onCreate(savedInstanceState); пытаетесь вставить текст?
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 16:25  [ТС] #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 #12
Цитата Сообщение от Klafe Посмотреть сообщение
Прога не запускается на телефоне.
что значит не запускается? вы явно чего-то не договариваете. не заставляйте меня вытягивать с вас по одному слову...
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
16.01.2013, 16:40  [ТС] #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 #14
ну, похоже на то, что onCreate происходит раньше чем onCreateView, соответственно getView() в методе onCreate возвращает null и вы получаете NullPointerException

Добавлено через 1 минуту
может будете делать это в методе onCreateView? вроде для этого он и есть)
Klafe
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 101
17.01.2013, 09:51  [ТС] #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, 09:51
Привет! Вот еще темы с ответами:

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

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

Кликабельные Fragment - Программирование Android
Доброго дня, коллеги. Прошу помощи. Есть активити с scrollView, внутри его Fragment: <ScrollView ...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.01.2013, 09:51
Ответ Создать тему
Опции темы

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