Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
SkN[i]lpl[e][r]
3 / 3 / 2
Регистрация: 12.05.2011
Сообщений: 248
1

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

29.03.2015, 18:16. Просмотров 1430. Ответов 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
Ответы с готовыми решениями:

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

Не отрабатывает MainActivity
Здравствуйте! В общем, в моем приложении есть два Frament и Main Activity. В...

MainActivity AsyncTask
Добрый вечер. Ребята тут небольшая проблема. Мне нужно Заполнить...

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

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

26
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
30.03.2015, 12:51 21
Может у вас context == null? Пишите лучше вместо него MainActivity.this
0
SkN[i]lpl[e][r]
3 / 3 / 2
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 15:31  [ТС] 22
dajver, безрезультатно, точно такая же ошибка, и те же строки выделяет

Добавлено через 37 минут
я так понял что context == nul, я проверил на условии его, но MainActivity.this точно не null. Но однако всеравно ошибка...

Добавлено через 37 минут
попробовал сделать такую штуку: создал под
Java
1
2
3
4
public HybridMap(Context context, AttributeSet attrs) {
        super(context, attrs);
//здесь  загрузка карты и ее настройка
}
еще однин конструктор, как мне и советовали
Java
1
2
3
public HybridMap(Context context) {
        super(context);
}
и весь програмный код (загрузка карты и работа с ней) который был в верхнем конструкторе я переместил в этот. и запустил... Ошибок не выдало, да и при нажатии на кнопку не вылетало. Но карта совсем не отобразилась, как будто MapView не создался, просто черный экран и поверх кнопка.

Добавлено через 1 час 19 минут
Как оказалось нельзя объявлять конструктор одноименный основному. Нужно работать с конструктором с двумя параметрами, который объявлен изначально. Проблема все та же:
Java
1
HybridMap hbr = new HybridMap(MainActivity.this, какойто атрибут)
какой сюда атрибут ставить?...
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
30.03.2015, 16:33 23
SkN[i]lpl[e][r], то есть у вас есть в xml элемент - HybridMap? И вы хотите его в коде использовать? И создаете новый объект HybridMap уже в коде? Уже догадались что не так?
0
SkN[i]lpl[e][r]
3 / 3 / 2
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 16:48  [ТС] 24
Spelcrawler, ну почти догадываюсь да в main.xml есть этот элемент. Получается поверх старого создается новый? но как это исправить тогда?...
0
androbro
343 / 303 / 68
Регистрация: 17.10.2014
Сообщений: 898
30.03.2015, 16:53 25
SkN[i]lpl[e][r],
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
Получается поверх старого создается новый?
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
но как это исправить тогда?...
ну очевидно же, надо сверху еще и третий создать
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
30.03.2015, 16:55 26
Лучший ответ Сообщение было отмечено SkN[i]lpl[e][r] как решение

Решение

Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
Получается поверх старого создается новый? но как это исправить тогда?...
Нет! Получается, что это два разных элемента. Вам нужно в xml назначить id элементу, а в коде найти его по id.
XML
1
android:id="@+id/myMap"
Java
1
HybridMap myMap = (HybridMap) findViewById(R.id.myMap);
После этого у вас будет доступ из кода к элементу в xml.
2
SkN[i]lpl[e][r]
3 / 3 / 2
Регистрация: 12.05.2011
Сообщений: 248
30.03.2015, 17:01  [ТС] 27
Урааа!!!!!!!! Заработало!!!!!!!!!
Spelcrawler, красавчик!!! Спасибо огромное!!! 2 дня мучился!!!

Добавлено через 56 секунд
Все отлично работает теперь!)
0
30.03.2015, 17:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 17:01

Переделать MainActivity в Fragment
Всем добра, друзья. Подскажите. Приложение работает со сторонним SDK. Создал...

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

SplashScreen не дает запуститься MainActivity
Здравствуйте!Есть предзагрузочная анимация в приложении и при запуске на...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

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