С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Antarit
0 / 0 / 0
Регистрация: 03.08.2014
Сообщений: 9
#1

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

18.04.2016, 16:58. Просмотров 223. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 16:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работают ли Listener в абстрактной родительской Activity? (Программирование Android):

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

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

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

Из одной Activity запустить функцию другой Activity - Программирование Android
например есть Activity2 которое я показываю в Dialog окошке, там у меня находятся Date and Time Picker ы (Дата - начало, Дата - окончание)...

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

Вызвать из одной activity функцию другой activity - Программирование Android
вызвать из одного activity функцию другой activity Подскажите, можно ли такое реализовать? Допустим у меня есть основная активити и...

2
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 1
18.04.2016, 17:14 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
просто надо использовать фрагменты, а не кучу активити
1
Antarit
0 / 0 / 0
Регистрация: 03.08.2014
Сообщений: 9
18.04.2016, 19:39  [ТС] #3
Блин, мне никогда не стать разработчиком... Блин, казалось бы дошел до рабочего прототипа, оставалось наполнить базу контентом и радоваться жизни но нет... теперь еще и с фрагментами разбираться, и с таблетами, чтобы реюзать фрагменты, а то че зря с ними париться собрался... дык еще почитал пару постов fragment vs activity теперь хрен разберешь что к чему, одни считают фрагменты бессмысленным злом, а другие панацеей от все бед, кому верить?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 19:39
Привет! Вот еще темы с ответами:

Как вызвать Activity не из Activity? - Программирование Android
Приложение перехватываем входящие СМС. Есть класс унаследованный от BroadcastReceiver, который обозначен в манифесте как приемник...

Создание Activity в другом Activity - Программирование Android
Нормально ли создавать экземпляр какого-либо Activity в текущем Activity? Дело в том, что код, нужный для работы с данными находится в...

Вывод activity в activity - Программирование Android
Добрый день. У меня есть две activity мне необходимо вывести одну в другой, а именно что бы меню activity1 осталось прежнем, а в...

Listener и RSS - Программирование Android
Здравствуйте! Начинаю изучать программирование на java под android. В качестве практики мой выбор пал на написание RSS ридера, который бы...


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

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

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