В настоящее время я использую следующее решение в своем классе, расширяющем ListFragment
:
1) Вы в своем классе onActivityCreated
проверяете, является ли ваш адаптер (который является переменной класса) нулевым, а затем создаете его экземпляр. Затем раздуйте нижний колонтитул, например, так:
View footerView = View.inflate
(getActivity(), R.layout.list_footer_loader_view, null);
Вам нужно сделать это только один раз! Нижний колонтитул и адаптер необходимо создать только один раз. Я создаю оба из них в моем onActivityCreated
Теперь к «сложной части» установите свой фрагмент в onCreate следующим образом:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
Мне нравится делать это в onCreate
, потому что это не относится к делу. Теперь с setRetainInstance(true)
ваш фрагмент не будет воссоздан после уничтожения активности, такого события, как ориентация экрана.
Теперь после этих строк добавьте нижний колонтитул следующим образом:
getListView().addFooterView(footerView);
А затем подключите адаптер к списку:
setListAdapter(adapter);
Это нужно делать каждый раз, когда активность умирает, сделайте это в onActivityCreated
.
И одна из других важных вещей, о которых вы обычно должны думать, когда дело доходит до фрагментов, заключается в том, что вы не создаете фрагмент каждый раз, когда вызывается onCreate
активности.
Например, сделайте это (если вы НЕ используете пакет поддержки):
MyFragment myFragment = (MyFragment)
getFragmentManager().findFragmentByTag(tag);
if (myFragment == null) {
myFragment = MyFragment.newInstance();
getFragmentManager().beginTransaction().
add(myFragment, tag).commit();
}
Это создаст фрагмент только один раз, если, конечно, тег уникален для этого фрагмента.
person
Johan S
schedule
15.02.2013