Questions Thread - February 19, 2016

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"));
    }
}
/r/androiddev Thread