Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 444

Структура приложения в Android Studio

13.08.2017, 22:42. Показов 974. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Вот сделал обработчик события на одну из многих кнопок в приложении в Google Maps Activity.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.sonexrfs.maplocs;
 
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
 
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import android.view.View;
import android.widget.Button;
 
 
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
 
    private GoogleMap mMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
 
    }
 
 
    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
 
        //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
        //        new LatLng(-18.142, 178.431), 2));
 
        // Other supported types include: MAP_TYPE_NORMAL,
        // MAP_TYPE_TERRAIN, MAP_TYPE_HYBRID and MAP_TYPE_NONE
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    }
 
 
   // Мой метод переключения кнопкой
    int tag_buyton3 = 0;
    public void onButton3Click(View view)
    {
        Button button3 = (Button)findViewById(R.id.button3);
 
        tag_buyton3 = tag_buyton3 + 1;
        if (tag_buyton3 == 1) {
            mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
            button3.setText("Map 2");
        }
        if (tag_buyton3 == 2) {
            mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            button3.setText("Map 3");
        }
        if (tag_buyton3 == 3) {
            mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            button3.setText("Map 1");
        }
        if (tag_buyton3 == 3) {
            tag_buyton3 = 0;
        }
    }
 
}

Подскажите пожалуйста, мне так этот код и лепить в этом классе для всех обработчиков кнопок, для onCreate и вообще всей логики приложения, если у меня всего одного Google Maps Activity?

Боюсь что тогда получится бесконечная портянка кода, в которой будет тяжело разобраться и она будет такой длинной,
что мощности процессора не хватит осуществлять прокрутку кода скроллом...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.08.2017, 22:42
Ответы с готовыми решениями:

Не отображается структура проекта в Android Studio
Здравствуйте! Скачал учебный проект с официального сайта АндройдДивелоперс:...

Создать релиз приложения на Android Studio
Как в Android Studio создать релиз приложения, если мне НЕ нужно его публиковать на GooglePlay? (приложение будет распространятся вручную...

Вылет приложения сделанного на Android Studio
Здравствуйте! Создал проект на AndroidStudio, создал apk. Скинул на телефон, установил... При запуске программы, она тут же закрывается и...

11
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
13.08.2017, 22:53
Откуда вы только все берётесь такие беспомощные, даже по-русски не могут объяснить чего хотят и не владеют поисковыми системами.
Есть ещё обработчики нажатия в виде button.setOnClickListener(), а ещё есть замечательный case для множественного выбора. Последнее предложение я даже понимать не хочу, что имелось в виду.
0
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 444
13.08.2017, 22:57  [ТС]
ExFau$t
Ну последнея фраза это сарказм)

А суть вопроса не в том, как укоротить(оптимизировать) этот код, а в том, что если у меня будет всего одно активити, то весь код приложения пишется в одном модуле в этом классе? Ну в примерах то так..

Я не нашел примера, как вынести этот код обработчика в отдельный класс, не создавая новое активити или фрагмент.

пс Я новичек ещё)
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
13.08.2017, 23:03
В активити пишется код взаимодействия с UI, остальное выносится в другие классы, согласно принципам ООП.
0
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 444
13.08.2017, 23:06  [ТС]
То что у меня сейчас логика в теле
Java
1
public void onButton3Click(View view)
, можно вынести в другой класс,
не создавая новое активити? Если да, то подскажите пожалуйста как..
0
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
13.08.2017, 23:13
можно как минимум разгрузить вынести всю логику по смыслу в отдельный метод. Например
в onCreate создать метод onButtonClick();

потом создать метод и вынести туда обработчик
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
13.08.2017, 23:18
Cannon1, я не понимаю твои диалекты. Что вынести, зачем вынести?
0
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 444
14.08.2017, 17:38  [ТС]
ExFau$t
Mail-up правильно сообразил, я хочу разгрузить код, вынося обработчики желательно вообще в другой класс или модуль,
названный по смыслу. Хорошо бы пример...

Нечто похожее есть, если делать через фрагменты, но как обычно делают приложения где много логики и wiew?..

Добавлено через 18 часов 12 минут
Почему при переключении экранов в горизонтальное положение, произвольно срабатывает переключение карты на начальный вид?
То есть, если я до этого включу режим спутника карты, то при повороте телефона горизонтально(или обратно), карта опять переключается в режим MAP_TYPE_NORMAL? Тоесть тот, который был при запуске приложения. Как этого избежать?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.08.2017, 17:45
прописывать кнопкам и вьюшкам прямо в xml имя метода, который будет ловить слики - так себе практика
примеров на форуме вагон, открываешь практически любую тему и там есть куски кода

в onCreate нахишь свою кнопку через findViewById и вешаешь на нее слушатель
если надо что бы код слушателя был в другом классе - этот класс должен имплементировать OnClickListener
1
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
14.08.2017, 18:34
Потому что активити при повороте пересоздается.
1
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 444
14.08.2017, 19:13  [ТС]
Спасибо.

А как делают чтобы при повороте экрана не пересоздавалось все заного? Или как правильно-то делать?

Нагуглил вот такую костыль заглушку в файл AndroidManifest.xml

XML
1
android:configChanges="orientation|screenSize"
Но пишут что много проблем потом может быть из-за этого костыля заглушки, так как лучше сделать?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.08.2017, 19:25
если разметка для обеих ориентаций одна и та же то так и надо делать
иначе так делать не надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2017, 19:25
Помогаю со студенческими работами здесь

Проблема с отладкой Android приложения в Visual studio
Добрый день, я новичек, вопрос скорее всего глупый. Проблема заключается в следующем: когда я запускаю отладку свежесозданного...

Android Studio. Создание приложения используя API
Приветствую. Я в этом деле совсем зеленый, необходимо организовать отображение списка пород котов, при выборе пользователем,...

Подскажите как работать с шапкой приложения. android studio
Подскажите как работать с верхней шапкой(колонтикулом) приложения, (где название) использую форму(шаблон) ЕмптиАктивити. добавить там что...

Создание приложения на Java в среде разработки android studio
как создать простое приложение на Java в android studio ? - не для планшета телефона или часов. для Windows скажем так. кто в android...

Android Studio. Установка приложения на эмулятор. Application Installation Failed
С недавних пор перестали устанавливаться на эмулятор абсолютно все мои приложения. Даже только что созданный пустой проект не...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru