I have several preference panes in a project and I wanted to avoid reusing code with an abstract class.
Why does this throw "Error:(207, 19) error: no enclosing instance of type SettingsActivity is in scope"?
public class SettingsActivity extends AppCompatPreferenceActivity {
...
public abstract class ProjectPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
abstractAddPreferencesFromResource();
setHasOptionsMenu(true);
abstractBindPreferences();
}
abstract void abstractAddPreferencesFromResource();
abstract void abstractBindPreferences();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
startActivity(new Intent(getActivity(), SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
/**
* This fragment shows general preferences only. It is used when the
* activity is showing a two-pane settings UI.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends ProjectPreferenceFragment {
void abstractAddPreferencesFromResource() {
addPreferencesFromResource(R.xml.pref_general);
}
void abstractBindPreferences() {
bindPreferenceSummaryToValue(findPreference("example_text"));
bindPreferenceSummaryToValue(findPreference("example_list"));
}
}