Реализация класса из другого каталога - Android - PullRequest
0 голосов
/ 26 июня 2018

Я работаю с bottomNavigationBar, и у меня есть класс

 navBase4 extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener

Все мои классы, которые используют мой bottomNavigationBar, реализуют этот класс, и он обрабатывает выделение выделенного значка, открытие новых активов и т. Д.

Например, другой класс, который находится в том же каталоге, что и navBase4, это

public class userProfile extends navBase4

Но я только что создал новый класс

public class updateInfo extends navBase4

Это находится в подкаталоге папки, содержащей navBase4. когда я пытаюсь реализовать методы, которые требует navBase4, я получаю сообщение об ошибке: Класс updateInfo должен быть объявлен как абстрактный или реализовывать абстрактный метод getContentViewId () в navBase4

Почему он работает, когда класс находится в том же каталоге, что и navBase4, но не в том случае, если он находится в подкаталоге?

код navBase4:

public abstract class navBase4 extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

protected BottomNavigationView navigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getContentViewId());
    navigationView = (BottomNavigationView) findViewById(R.id.navigation);
    navigationView.setOnNavigationItemSelectedListener(this);
    doCustomStuffOnStart();
}

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    //move to a new activity on item selected
}

protected void updateNavigationBarState(){
    //update state
}

void selectBottomNavigationBarItem(int itemId) {
    //do stuff
}

abstract int getContentViewId();

abstract int getNavigationMenuItemId();

abstract void doCustomStuffOnStart();

}

код updateInfo - этот код выдает ошибку

public class updateInfo extends navBase4 {

private TextView mTextMessage;

@Override
int getContentViewId() {
    return R.layout.activity_user_profile;
}

@Override
int getNavigationMenuItemId() {
    return R.id.navigation_user_profile;
}

@Override
void doCustomStuffOnStart() {

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_info);

    mTextMessage = (TextView) findViewById(R.id.message);
    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
* *} Тысяча двадцать-один

Каталог файлов

Userprofile:

-navBase4

-userProfile

Папка

: подстраницы содержат updateInfo

1 Ответ

0 голосов
/ 26 июня 2018

Это не имеет ничего общего с каталогом. navBase4 - абстрактный класс. Если вы хотите сделать неабстрактный дочерний элемент, вам нужно предоставить реализацию для всех неабстрактных методов.

Кроме того, ваш код будет поврежден - если вы используете систему, в которой вы возвращаете идентификатор представления контента, как этот, вы НЕ хотите вызывать setContentView в дочернем классе. Называйте это только в родительском классе. В противном случае представления, родительское представление использует findViewById, чтобы найти не будет на экране, так как представление содержимого переопределяется.

...