从另一个目录实现类-Android

时间:2018-06-26 18:43:16

标签: android inheritance abstract-class bottomnavigationview

我正在使用bottomNavigationBar,并且有一个课程

 navBase4 extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener

我所有使用bottomNavigationBar的类都实现了该类,并且该类可以突出显示所选图标,打开新的活动对象等。

例如,与navBase4位于同一目录中的另一个类是

public class userProfile extends navBase4

但是我刚刚创建了一个新类

public class updateInfo extends navBase4

位于包含navBase4的文件夹的子目录中。当我尝试实现navBase4要求的方法时,出现错误消息: 类'updateInfo'必须声明为抽象,或者必须在'navBase4

中实现抽象方法'getContentViewId()'

为什么该类与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 :(得分:1)

与目录无关。 navBase4是一个抽象类。如果要成为一个非抽象的孩子,则需要为所有非抽象的方法提供一个实现。

此外,您的代码也将被破坏-如果您使用的系统返回这样的内容视图ID,则您不想在子类中调用setContentView。仅在父类中调用它。否则,由于内容视图被覆盖,父视图使用findViewById查找的视图将不在屏幕上。