-4

誰かがこれを行う方法を教えてもらえますか? コードは次のとおりです。

public class MainActivity extends Activity implements
        ActionBar.TabListener, android.content.SharedPreferences.OnSharedPreferenceChangeListener{

    public s fg = new s();
    public static class Others extends PreferenceFragment{

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
             addPreferencesFromResource(R.xml.preference_other);

             Preference pref = findPreference("start");
             pref.setOnPreferenceClickListener(new OnPreferenceClickListener(){

                @Override
                public boolean onPreferenceClick(Preference preference) {
                    HOW CAN I CALL S CLASS HERE
                    return false;
                }

             });
        }
    }

}

私の質問は、Others クラスから fg.start() を呼び出す方法です。前もって感謝します。

4

1 に答える 1

0

Othersisであるためstatic、参照を保持していないため、MainActivityそのメンバーにアクセスできません。

Othersは であるため、親アクティビティへの参照を保持するフラグメントは Android アプリでのリークの一般的な原因であるためFragment、非 にしないでください。static

質問に適切に答えるには、何が何でsあるかを知る必要があります。この問題を解決するためのいくつかの可能性を次に示します。

  • sFratment でのみ必要な場合はs、フラグメントのメンバーをOthers作成し、そこに作成します。

  • フラグメントが でのみ使用される場合はMainActivity、次のようにすることができます。

    ((MainActivity)getActivity()).fg.start();
    

    (これにより、フラグメントとホスティング アクティビティの依存関係が作成され、後で問題が発生する可能性があります。)

  • アプリケーション全体で が常に必要な場合sは、サブクラスApplication化してそのメンバーにすることができます。を使用してフラグメントからアプリケーションにアクセスできますgetActivity().getApplication()

于 2013-08-06T10:22:25.133 に答える