PageFragment를 만듭니다. ViewPager 어댑터에 의해 생성되고 ViewPager에 배치됩니다. getChildFragmentManager() 메서드로 얻은 FragmentManager를 사용하여 ListFragment의 PageFragment 내부를 전환합니다.
역 누름 이벤트 처리가 복잡하기 때문에 작업에서 제공해야합니다.
public interface IBackStackManager {
void addBackStackListener(BackStackListener listener);
void removeBackStackListener(BackStackListener listener);
interface BackstackListener {
boolean onBackPressed();
}
}
이 같은 활동으로 구현 인터페이스를 만들기 : 당신의 PageFragment 사용 onAttach 및 onDetach 방법에
public class MainActivity extends AppCompatActivity implements IBackStackManager {
private final Deque<BackStackListener> backStackListeners = new ArrayDeque<>();
@Override
public void addBackstackListener(BackStackListener listener) {
backStackListeners.add(listener);
}
@Override
public void removeBackStackListener(BackStackListener listener) {
backStackListeners.remove(listener);
}
@Override
public void onBackPressed() {
boolean result = false;
if (backStackListeners.size() > 0) {
BackStackListener listener = backStackListeners.peekLast();
result = listener.onBackPressed();
}
if (!result) {
super.onBackPressed();
}
}
}
다시 등록 스택 청취자에게
class PageFragment extends Fragment implements IBackStackManager.BackStackListener {
protected IBackStackManager backStackManager;
onAttach(Context context){
super.onAttach(context);
try{
backStackManager = (IBackStackManager) context;
backStackManager.addBackStackListener(this);
} catch(ClassCastException ex){
ex.printStacktrace();
}
}
onDetach(){
super.onDetach();
if (backStackManager != null){
backStackManager.removeBackStackListener(this);
}
}
boolean onBackPressed(){
if (getChildFragmentManager().getBackStackEntryCount() > 0){
getChildFragmentManager().popBackStack();
return true;
} else {
return false;
}
}
}