Абстрактный класс BaseActivity

204
26 ноября 2016, 19:12

Я хочу создать абстрактный класс BaseActivity, от которого бы наследовались остальные Activity в проекте, во всех классах Activity у меня сейчас используется Toolbar, поэтому хочу перенести функционал связанный с Toolbar в BaseActivity. Не знаю, как это правильно сделать.

Делаю так, класс BaseActivity:

public abstract class BaseActivity  extends AppCompatActivity {
    Toolbar toolbar;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // NullPointerException
        toolbar.setTitleTextColor(Color.WHITE);
        toolbar.setSubtitleTextColor(Color.WHITE);
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_24dp);
    }
    public void addToolbarTitle(String titleName){
        toolbar.setTitle(titleName);
    };
} 

Потом наследуюсь обычной Activity от BaseActivity:

public class ConversationActivity extends BaseActivity  {
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conversation);
}
}

Получаю NullPointerException в BaseActivity, как это сделать правильно?

Answer 1

До вызова setContentView() представления не существует и вызов findViewById(R.id.toolbar) вернёт null. Вынесите код установки toolbar'а в отдельный метод в BaseActivity и вызывайте его в onCreate() дочерних классов после установки макета.

public abstract class BaseActivity extends AppCompatActivity {
    Toolbar toolbar;
    protected void setToolbar() {
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitleTextColor(Color.WHITE);
        toolbar.setSubtitleTextColor(Color.WHITE);
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_24dp);
    }
    public void addToolbarTitle(String titleName){
        toolbar.setTitle(titleName);
    };
}
public class ConversationActivity extends BaseActivity  {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conversation);
        setToolbar();
   }
}
READ ALSO
NavigationDrawer и клавиатура

NavigationDrawer и клавиатура

Во время нажатия на EditText появляется клавиатура, но когда открываем NavigationDrawer то она никуда не пропадает и даже если перейдем на другой фрагмент...

303
Как вывести часть текста из файла?

Как вывести часть текста из файла?

Есть текставик содержащий луа скрипты и ненужный мусорНужно выводить куски текста скажем от "local" до "}" по нажатию кнопки

220
Компиляция приложения android на сервере

Компиляция приложения android на сервере

Как перенести процесс сборки проекта на отдельную машину? поверхностный гугл не дал внятных результатовКто связывался с этим? пишу в AS

260