java - Android OnPreferenceClickListener

标签 java android preferencefragment onpreferenceclicklistener

我有一个 Activity,它使用 PreferenceFragment 显示设置菜单。有一种方法可以将 Bean 列表传递给 fragment ,以便它可以动态生成一个 Preference 列表,我希望这些列表本质上就像按钮一样。我正在尝试使用 OnPreferenceClickListener 对被单击的首选项之一使用react,但我需要让最外层的 Activity 了解这一点。我的代码如下所示:

public class PairActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fragment = new SettingsFragment();
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, fragment)
                .commit();
        ...
    }


    public static class SettingsFragment extends PreferenceFragment {
        public void displayBeans(Collection<Bean> beans) {
            ...
            for(Bean bean : beans) {
                Preference pref = new Preference(getActivity());
                pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                    @Override
                    public boolean onPreferenceClick(Preference preference) {
                        // want to let the Activity know something happened
                    }
                });
            }
        }
    }

    ...
}

注释显示了我想要从哪里访问 Activity,但它位于静态类内的匿名类内...我该怎么做才能解决我的问题?

最佳答案

编辑:

<罢工> 让您的SettingsFragment PairActivity内部类:

<罢工>
public class PairActivity extends Activity {

    public class SettingsFragment extends PreferenceFragment {

    }

}

然后您可以使用 PairActivity.this 安全地引用该 Activity 。

编辑:

这是您链接的一个很好的答案,这确实是这样使用它的正确方法。我没想过。

尽管如此,当 fragment 附加到 Activity 时,您可以使用 getActivity 引用它。如果您从 clickListener 内部调用此方法,则 fragment 肯定会附加到 Activity ,因此可以这样做:

public class PairActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fragment = new SettingsFragment();
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, fragment)
                .commit();
        ...
    }


    public static class SettingsFragment extends PreferenceFragment {
        public void displayBeans(Collection<Bean> beans) {
            ...
            for(Bean bean : beans) {
                Preference pref = new Preference(getActivity());
                pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                    @Override
                    public boolean onPreferenceClick(Preference preference) {
                        PairActivity pairActivity = (PairActivity) getActivity();
                        // Do something with pairActivity instance
                    }
                });
            }
        }
    }

    ...
}

您只需确保不会将 fragment 作为 Actor (PairActivity) 附加到另一个 Activity 中然后会抛出异常。

关于java - Android OnPreferenceClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30423393/

相关文章:

java - 更新 JFrame 内容

android - 在 Android 上将循环设置为 -1 时不播放声音

Android:从 PreferenceFragment 关闭 Activity

android - (Activity+preferencefragment) 错误膨胀类 com.android.internal.widget.ActionBarContainer

android-studio - 首选项库导致 E/libc & E/Pref 错误

java - Apache POI 获取 NPE 读取 xls 文件

java - 通过 shell 传递空格分隔值需要比预期更多的参数

java - 在java中拆分字符串作为分隔符

java - Android ActionBar 带有自定义图标?

java - << 字节数组处理中的操作