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

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

Войти
Регистрация
Восстановить пароль
 
 
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
#1

Обращение к функции находящейся не в MainActivity - Программирование Android

29.03.2015, 18:16. Просмотров 1190. Ответов 26
Метки нет (Все метки)

Доброго времени суток! Имеется MainActivity.java и HybridMap.java. Мне необходимо при нажатии кнопки обратиться к процедуре в HybridMap. Процедура никакие данные не возвращает, просто нужно выполнение. Пробовал обращаться так:
Java
1
2
3
4
5
6
7
8
9
10
private HybridMap hbr;
//далее уже в обработчке нажатия кнопки
 imgBtn  = (ImageButton) findViewById(R.id.image_button);
        OnClickListener oclBtnIMG = new OnClickListener() {
            @Override
            public void onClick(View v) {
               hbr.dostoprLayers();
            }
        };
        imgBtn.setOnClickListener(oclBtnIMG);
Но при нажатии на кнопку происходит крах программы и ошибка с указанием этой строки. Помогите разобраться как правильно обратиться к этой функции...
Вот класс и моя функция в HybridMap.java:
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
public class HybridMap extends FrameLayout implements MapViewConstants {
//
//здесь обьявление различных переменных и констант
//
public HybridMap(Context context, AttributeSet attrs) {
        super(context, attrs);
//здесь  загрузка карты и ее настройка
}
 
public  void dostoprLayers(){
      GeoPoint point2 = new GeoPoint(gps.getLatitude(), gps.getLongitude());
 
      ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
    
      OverlayItem olItem2 = new OverlayItem("Here", "SampleDescription", point2);
      Drawable newMarker2 = this.getResources().getDrawable(R.drawable.flag_green);
      olItem2.setMarker(newMarker2);
      items.add(olItem2);
     
      this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items,
              new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                  @Override
                  public boolean onItemSingleTapUp(final int index,
                                                   final OverlayItem item) {
                    
                      mv.getOverlays().remove(mMyLocationOverlay);
                      mv.invalidate();
 
                      return true; 
                  }
 
                  @Override
                  public boolean onItemLongPress(final int index,
                                                 final OverlayItem item) {
                     
                      return false;
                  }
              }, resourceProxy);
      this.mv.getOverlays().add(this.mMyLocationOverlay);
      mv.invalidate();
  }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2015, 18:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к функции находящейся не в MainActivity (Программирование Android):

Обращение к textView из другого класса (не MainActivity) в AndroidStudio - Программирование Android
Добрый вечер, у меня такой вопрос. В MainActivity можно обращаться к объектам, а если в другом классе требуется, допустим, найти объект...

Не отрабатывает MainActivity - Программирование Android
Здравствуйте! В общем, в моем приложении есть два Frament и Main Activity. В Main Activity прописано меню Navigation Drawer, а фрагменты...

MainActivity AsyncTask - Программирование Android
Добрый вечер. Ребята тут небольшая проблема. Мне нужно Заполнить NavigatorDrawer (из базы). Почему когда я пытаюсь в...

Не создается MainActivity.java - Программирование Android
Подскажите почему не создается форма по умолчанию?

Доступ к полям MainActivity - Программирование Android
Добрый день, что-то не могу сообразить, как получить доступ к полям MainActivity из другого класса ? обычно доступ к полям через объект...

Переделать MainActivity в Fragment - Программирование Android
Всем добра, друзья. Подскажите. Приложение работает со сторонним SDK. Создал проект Navigation Drawer Activity. Не могу найти, как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,111
29.03.2015, 19:31 #2
а что в логах пишет? Что то мне подсказывает что вы забыли
Java
1
hbr = new HybridMap(this);
сделать
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 09:38  [ТС] #3
а если до этого объявил уже
Java
1
private HybridMap hbr;
разве нужно прописывать
Java
1
hbr = new HybridMap(this);
?
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
30.03.2015, 09:45 #4
конечно!

Java
1
private HybridMap hbr;
так ты объявляешь переменную, ее значение в данный момент null

Java
1
hbr = new HybridMap(this);
а вот так ты инициализируешь переменную, т.е. присваиваешь ей значение экземпляра класса
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 09:54  [ТС] #5
в логах пишет
Java
1
2
3
4
FATAL EXCEPTION: main
Process: моя_прога, PID: 1206
    java.lang.NullPointerException
            at моя_прога.MainActivity$2.onClick(MainActivity.java:283)
пробовал дописывать
Java
1
hbr = new HybridMap(this);
ен работает, подчеркивает красным "this" и пишет:
HybridMap (android.content.Context, AttributeSet) in HybridMap cannot be aplied to (android.view.View.OnClickListener)
Я работаю в Android Studio.
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
30.03.2015, 09:55 #6
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
а если до этого объявил уже
ну объявлен то он объявлен...но не создан же
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
разве нужно прописывать
конечно нужно
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 09:58  [ТС] #7
ну понял, чайник я в JAVA и в C++ ну так он this говорит что неверная переменная
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
30.03.2015, 10:00 #8
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
ен работает, подчеркивает красным "this" и пишет:
толи вынеси создание за пределы анонимного класса:
Java
1
hbr = new HybridMap(this);
либо используй:
Java
1
hbr = new HybridMap(текущая_активити.this);
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 10:40  [ТС] #9
в обоих случаях не работает
я так понял нужно сделать так:
Java
1
 hbr = new HybridMap(this.getClass, какойто аттрибут);
это я подумал из-за того что у нас
Java
1
HybridMap(Context context, AttributeSet attrs)
вот не могу понять какой аттрибут...

Добавлено через 34 минуты
Никак не получается... пробовал AttributeSet удалять из Hybrid Map, тогда вообще программа не запускалась, сразу ошибка выходила. В общем тупик...
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
30.03.2015, 10:52 #10
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
вот не могу понять какой аттрибут...
для начала попробуйте создать вашу вьюху в xml а не программно
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
30.03.2015, 11:09 #11
this ты я так понимаю используешь внутри onClick

в данной момент это не тот контекст, который он хочет получить

как решение - создай переменную Context context; и в oncreate передай ему значение this.context = context

и далее везде используй эту переменную, где нужен контекст
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 11:23  [ТС] #12
Цитата Сообщение от androbro Посмотреть сообщение
для начала попробуйте создать вашу вьюху в xml а не программно
вы про mapView? она у меня и так в xml есть
Цитата Сообщение от fgtmenow Посмотреть сообщение
в oncreate передай ему значение this.context = context
и как это сделать?
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
30.03.2015, 11:28 #13
Уважаемый, читайте как создать глобальную переменную в классе. Программировать тут вас никто не научит
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
30.03.2015, 11:31 #14
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
пробовал AttributeSet удалять из Hybrid Map, тогда вообще программа не запускалась, сразу ошибка выходила. В общем тупик...
да что Вы говорите, у FrameLayout есть конструктор без AttributeSet.
Java
1
2
3
4
    public HybridMap(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
0
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 11:41  [ТС] #15
Цитата Сообщение от androbro Посмотреть сообщение
да что Вы говорите, у FrameLayout есть конструктор без AttributeSet.
Когда делал без AttributeSet выходила эта ошибка:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.моя_прога/com.моя_прога.MainActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class com.моя_прога.HybridMap
Цитата Сообщение от fgtmenow Посмотреть сообщение
Уважаемый, читайте как создать глобальную переменную в классе. Программировать тут вас никто не научит
извиняюсь за глупый вопрос
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 11:41
Привет! Вот еще темы с ответами:

Notification - запуск MainActivity - Программирование Android
Здравствуйте! Есть Service который посылает запрос, парсит страницу и выводит notification. При нажатии на него открывается моя...

SplashScreen не дает запуститься MainActivity - Программирование Android
Здравствуйте!Есть предзагрузочная анимация в приложении и при запуске на эмуляторе все идет гладко. Решил запустить на телефоне,но тут...

Как получить context MainActivity в Service? - Программирование Android
В MainActivity создаю сервис и startService( SER );, как получить context MainActivity в сервисе, чтобы можно было манипулировать view?

Как запустить метод Fragment из MainActivity? - Программирование Android
есть фрагмент с картой, в нем метод: public void Sputnik(GoogleMap map) { ...


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

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

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