[英]Android: How to set an OnPreferenceClickListener on a Preference?
[英]Android OnPreferenceClickListener
我有一個Activity
使用PreferenceFragment
顯示設置菜單。 有一種方法可以將Bean
的列表傳遞給片段,以便它可以動態生成一個Preference
的列表,而我希望將其作為按鈕使用。 我正在嘗試使用OnPreferenceClickListener
來響應被單擊的首選項之一,但是我需要讓最外面的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
}
});
}
}
}
...
}
注釋顯示了我想從何處到達活動,但它在靜態類內的匿名類內部……我該怎么解決我的問題?
編輯:
使您的
SettingsFragment
成為
PairActivity
的
內部類:
public class PairActivity extends Activity { public class SettingsFragment extends PreferenceFragment { } }
然后,您可以使用
PairActivity.this
安全地引用活動。
編輯:
您鏈接的是一個很好的答案,並且確實是這樣使用它的正確方法。 我沒有考慮。
不過,將片段附加到活動后,您可以使用getActivity
引用它。 如果您從clickListener內部調用此方法,則片段肯定會附加到活動上,因此可以這樣做:
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
}
});
}
}
}
...
}
您只需要確保您沒有將片段附加到另一個活動,因為(PairActivity)
會引發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.