В момента използвам следното решение в моя клас, разширяващо ListFragment
:
1) Вие, във вашия клас onActivityCreated
проверявате дали вашият адаптер (който е променлива на класа) е нула, след което го инстанцирайте. След това надуйте долния колонтитул, например така:
View footerView = View.inflate
(getActivity(), R.layout.list_footer_loader_view, null);
Трябва да направите това само веднъж! FooterView и адаптерът трябва да бъдат създадени само веднъж. Създавам и двете в моя 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