-4

Can someone please tell me how to do this? here is the code:

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;
                }

             });
        }
    }

}

My question is how do I call fg.start() from the Others class. Thanks in advance.

4

1 回答 1

0

由于Othersis static,它不持有对其成员的引用MainActivity,因此无法访问其成员。

由于Others是 a Fragment,因此不应将其设为 non- static,因为包含对其父活动的引用的片段是 Android 应用程序中泄漏的常见来源。

要正确回答这个问题,我们需要知道是什么s。以下是解决问题的一些可能性:

  • 如果s只在片段中需要,则制作片段s的成员Others并在那里创建它。

  • 如果片段仅用于MainActivity,您可以执行以下操作:

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

    (这会创建一个片段到托管活动的依赖关系,这可能会在以后导致问题。)

  • 如果s您的应用程序一直需要它,您可以子类Application化并使其成为它的成员。您可以使用getActivity().getApplication().

于 2013-08-06T10:22:25.133 回答