(http://tools.oesf.biz/android-4.4.2_r1.0/xref/frameworks/base/core/java/android/preference/PreferenceFragment.java)
addPreferencesFromResource()
↓
setPreferenceScreen()
onActivityCreated()
↓
bindPreferences()
↓
final PreferenceScreen preferenceScreen = getPreferenceScreen();
preferenceScreen.bind(getListView());
↓
listView.setAdapter();
http://tools.oesf.biz/android-4.4.2_r1.0/xref/frameworks/base/core/java/android/preference/PreferenceScreen.java#143
- 143 public void bind(ListView listView) {
- 144 listView.setOnItemClickListener(this);
- 145 listView.setAdapter(getRootAdapter());
- 146
- 147 onAttachedToActivity();
- 148 }
そのため、PreferenceFragmentを継承したクラスでListViewにHeader、Footerを追加するタイミングは、super.onActivityCreated()より以前でなければならない。
- public class SettingFragment extends PreferenceFragment {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.prefs);
- }
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- TextView header = new TextView(getActivity());
- header.setText("Header");
- ListView listView = (ListView) view.findViewById(android.R.id.list);
- listView.addHeaderView(header);
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- }
- }
*ちなみに、onActivityCreated()より後にaddPreferencesFromResource()を呼んだ場合、Handlerを介してそのタイミングでListViewのsetAdapter()が呼ばれる
addPreferencesFromResource()
↓
setPreferenceScreen()
↓
postBindPreferences()
↓
Handler
↓
bindPreferences()
↓
final PreferenceScreen preferenceScreen = getPreferenceScreen();
preferenceScreen.bind(getListView());
↓
listView.setAdapter();
0 件のコメント:
コメントを投稿