This is the code that I try to use with ButterKnife but I got the following error when I run the project.
error: cannot find symbol class Activity
error: package Activity does not exist
error: package Activity does not exist
BaseActivity
public abstract class BaseActivity extends AppCompatActivity {
private Unbinder unbinder;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResource());
ButterKnife.bind(this);
setupUI();
}
protected abstract int getLayoutResource();
protected abstract void setupUI();
}
MainActivity
public class MainActivity extends BaseActivity {
@Override
protected void setupUI() {
}
@Override
protected int getLayoutResource() {
return R.layout.activity_main;
}
}
RegisterActivity
public class RegisterActivity extends BaseActivity {
@BindView(R.id.editText_username)
EditText et;
@Override
protected void setupUI() {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
protected int getLayoutResource() {
return R.layout.activity_register;
}
@Override
public void onBackPressed() {
this.finish();
}
}
What's my mistake why I can't bind multiple Activities with the abstract class?
First, you don't need Unbinder
for Activitybecause Unbinder is only needed for
Fragment`.
Second, you better use another method to be override so that you don't need to set the onCreate
. Something like this:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResource());
ButterKnife.bind(this);
setupUI();
}
protected abstract int getLayoutResource();
protected abstract void setupUI();
}
which then you can use:
public class MainActivity extends BaseActivity {
@Override
protected void setupUI() {
// setup the UI.
}
@Override
protected int getLayoutResource() {
return R.layout.activity_main;
}
}
Here is the working example for using ButterKnife with abstract class: