我有一个 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/