Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.08.2014
Сообщений: 9

Работают ли Listener в абстрактной родительской Activity?

18.04.2016, 16:58. Показов 1379. Ответов 2

Студворк — интернет-сервис помощи студентам
Ситуация следующая. Я захотел сделать NavigationView с DrawerLayout вшитыми в Activity, которое я сделал abstract, оно реализует интерфейс OnNavigationItemSelectedListener. Так вот не вкурю в чем прикол, если убрать abstract добавить его в манифест и вызвать, то навигация работает, я могу перейти в любое из 3х активити (их просто пока 3, и как бы раз так мало то навигация такая хитрая не нужна, но я в дальнейшем планирую добавить еще функционал и тогда навигация будет очень даже кстати). А вот делая его абстрактным и наследуясь от него, NavigationView вызывается, но клики по нему его только закрывают и не обрабатываются? подскажите в чем может быть дело, или как по другому сделать одинаковый NavigationView с одинаковой обработкой кликов не дублируя код во всех активити...

Вот собственно код этого хитроумно работающего и отлынивающего 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
package antarit.dietgen.activities;
 
import android.content.Intent;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
 
import antarit.dietgen.R;
 
public abstract class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
 
    private View activityContent;
    private DrawerLayout drawerLayout;
    private NavigationView navigationView;
 
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.base_activity);
        View rootView = getWindow().getDecorView();
        drawerLayout = (DrawerLayout) rootView.findViewById(R.id.base_drawer_layout);
        navigationView = (NavigationView) drawerLayout.findViewById(R.id.base_navigation_view);
        if (navigationView != null) {
            navigationView.setNavigationItemSelectedListener(this);
        }
    }
 
    @Override
    public View findViewById(int resId){
        return getActivityContent().findViewById(resId);
    }
 
    public void setActivityContent(int resId){
        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        activityContent = inflater.inflate(resId, drawerLayout, false);
        drawerLayout.addView(activityContent);
    }
 
    public View getActivityContent(){
        return this.activityContent;
    }
 
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.nav_diets:
                item.setChecked(true);
                drawerLayout.closeDrawers();
                startActivity(new Intent(this, DietsActivity.class));
                break;
            case R.id.nav_products:
                item.setChecked(true);
                drawerLayout.closeDrawers();
                startActivity(new Intent(this, FoodProductsActivity.class));
                break;
            case R.id.nav_users:
                item.setChecked(true);
                drawerLayout.closeDrawers();
                startActivity(new Intent(this, UsersActivity.class));
                break;
            default:
                drawerLayout.closeDrawers();
                break;
        }
        return true;
    }
 
    public void processException (String exceptionMessage) {
        Snackbar snackbar = Snackbar.make(getActivityContent(), exceptionMessage, Snackbar.LENGTH_LONG);
        View snackBarView = snackbar.getView();
        snackBarView.setBackgroundColor(ContextCompat.getColor(this, R.color.red));
        snackbar.show();
    }
}
P.S. Ах да не обращайте внимание на снэкбар, я его просто запихнул в это же активити так как в 2х активити я обрабатываю исключения и он их вывовит на экран, а все мои активити я унаследовал от этого ради навигации и решил на него же скинуть и эту "обработку исключений"
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2016, 16:58
Ответы с готовыми решениями:

Передача объекта не сериализуемого класса от дочерней Activity к родительской
Уважаемые форумчане, помогите решить проблему. Суть проблемы. Нужно передать объект класса GeocodeResult из дочерней Activity к...

Status : Failure -Test failed: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given
listener.ora: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =...

Не работают кнопки в разних activity
EditText psw; EditText logn; TextView textIn; TextView pass; Button buttonCancel; Panel pnl; @Override public...

2
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.04.2016, 17:14
Лучший ответ Сообщение было отмечено Antarit как решение

Решение

просто надо использовать фрагменты, а не кучу активити
1
0 / 0 / 0
Регистрация: 03.08.2014
Сообщений: 9
18.04.2016, 19:39  [ТС]
Блин, мне никогда не стать разработчиком... Блин, казалось бы дошел до рабочего прототипа, оставалось наполнить базу контентом и радоваться жизни но нет... теперь еще и с фрагментами разбираться, и с таблетами, чтобы реюзать фрагменты, а то че зря с ними париться собрался... дык еще почитал пару постов fragment vs activity теперь хрен разберешь что к чему, одни считают фрагменты бессмысленным злом, а другие панацеей от все бед, кому верить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2016, 19:39
Помогаю со студенческими работами здесь

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было принято из-за скорости. Но...

Изменение layout-элементов одного activity из другого activity
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном activity из второго activity, каким образом мне можно это...

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в activity1 из галереи Это код из activity1.java в...

Android - Передача данных с одного Activity на другое Activity
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном Activity , а обработка и вывод...

Из одного Activity получить значение другого Activity
Запускаю активити: public class MainActivity extends Activity { ... ... Intent intent = new Intent(getBaseContext(),...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru