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

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

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

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

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

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

Java
1
hbr = new HybridMap(this);
а вот так ты инициализируешь переменную, т.е. присваиваешь ей значение экземпляра класса
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 09:54  [ТС]     Обращение к функции находящейся не в MainActivity #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.
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
30.03.2015, 09:55     Обращение к функции находящейся не в MainActivity #6
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
а если до этого объявил уже
ну объявлен то он объявлен...но не создан же
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
разве нужно прописывать
конечно нужно
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 09:58  [ТС]     Обращение к функции находящейся не в MainActivity #7
ну понял, чайник я в JAVA и в C++ ну так он this говорит что неверная переменная
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
30.03.2015, 10:00     Обращение к функции находящейся не в MainActivity #8
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
ен работает, подчеркивает красным "this" и пишет:
толи вынеси создание за пределы анонимного класса:
Java
1
hbr = new HybridMap(this);
либо используй:
Java
1
hbr = new HybridMap(текущая_активити.this);
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 10:40  [ТС]     Обращение к функции находящейся не в MainActivity #9
в обоих случаях не работает
я так понял нужно сделать так:
Java
1
 hbr = new HybridMap(this.getClass, какойто аттрибут);
это я подумал из-за того что у нас
Java
1
HybridMap(Context context, AttributeSet attrs)
вот не могу понять какой аттрибут...

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

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

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

и далее везде используй эту переменную, где нужен контекст
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 11:23  [ТС]     Обращение к функции находящейся не в MainActivity #12
Цитата Сообщение от androbro Посмотреть сообщение
для начала попробуйте создать вашу вьюху в xml а не программно
вы про mapView? она у меня и так в xml есть
Цитата Сообщение от fgtmenow Посмотреть сообщение
в oncreate передай ему значение this.context = context
и как это сделать?
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
30.03.2015, 11:28     Обращение к функции находящейся не в MainActivity #13
Уважаемый, читайте как создать глобальную переменную в классе. Программировать тут вас никто не научит
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
30.03.2015, 11:31     Обращение к функции находящейся не в MainActivity #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
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 11:41     Обращение к функции находящейся не в MainActivity
Еще ссылки по теме:
Android SplashScreen не дает запуститься MainActivity
Eclipse не генерирует MainActivity и layout-файл Android
Android Как получить context MainActivity в Service?
Android Как запустить метод Fragment из MainActivity?
Перенос диалога из MainActivity в отдельный класс Android

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

Или воспользуйтесь поиском по форуму:
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 11:41  [ТС]     Обращение к функции находящейся не в MainActivity #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 Посмотреть сообщение
Уважаемый, читайте как создать глобальную переменную в классе. Программировать тут вас никто не научит
извиняюсь за глупый вопрос
Yandex
Объявления
30.03.2015, 11:41     Обращение к функции находящейся не в MainActivity
Ответ Создать тему
Опции темы

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