2014-11-25 2 views
0

삭제 된 항목을 가리킬 수있는 조각 백 스택을 다시 탐색하는 방법을 제대로 파악하려고합니다. 나는 이것이 매우 일반적인 경우라고 추측 하겠지만, 나는 그것을위한 해결책을 찾지 못했다. 그것은 감각에 대한 참조를 제거 할 것삭제 된 항목을 참조하는 백 스택 처리 방법

 
    |-----------------------|----------------------------|--------------------| 
    |   Action  |   Back stack   |  Location  | 
    |-----------------------|----------------------------|--------------------| 
    | View list    |       | List    | 
    | Go to Details(A)  | List      | Details(A)   | 
    | Go up     | List -> Details(A)   | List    | 
    | Go to Details(A)  | List -> Details(A) -> List | Details(A)   | 
    | Delete A (pops stack) | List -> Details(A)   | List    | 
    | Go back    | List      | Details(A) PROBLEM | 
    |-----------------------|----------------------------|--------------------| 

:

물론 같은 문제가 항목 B를 포함하지 않고 발생
 
    |-----------------------|--------------------------------------------------|--------------------| 
    |   Action  |     Back stack     |  Location  | 
    |-----------------------|--------------------------------------------------|--------------------| 
    | View list    |             | List    | 
    | Go to Details(A)  | List            | Details(A)   | 
    | Go up     | List -> Details(A)        | List    | 
    | Go to Details(B)  | List -> Details(A) -> List      | Details(B)   | 
    | Go up     | List -> Details(A) -> List -> Details(B)   | List    | 
    | Go to Details(A)  | List -> Details(A) -> List -> Details(B) -> List | Details(A)   | 
    | Delete A (pops stack) | List -> Details(A) -> List -> Details(B)   | List    | 
    | Go back    | List -> Details(A) -> List      | Details(B)   | 
    | Go back    | List -> Details(A)        | List    | 
    | Go back    | List            | Details(A) PROBLEM | 
    |-----------------------|--------------------------------------------------|--------------------| 

, 그것은 문제가있는 항목이 약간 위로를 스택 될 수 있음을 지적하고 그냥 항목을 삭제할 때 백 스택에서 항목을 삭제했지만 실제로는 백 스택이 어떻게 작동하는지 이해하지 못합니다. 작동하는 것 같다

한 가지 해결 방법은 누락 된 항목에 대한 조각을 만드는 스택을 팝업하는 것입니다,하지만 처음에 누락 된 항목에 대한 조각을 만들려고하지 좋을 것 :

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, 
     Bundle savedInstanceState) { 
    if(item == null) { 
     getFragmentManager().popBackStack(); 
     return null; 
    } 
    ... 
} 

나는이 같은 대부분의 조각을 추가

getSupportFragmentManager().beginTransaction() 
    .replace(R.id.container, TheFragment.newInstance(type)) 
    .addToBackStack(null) 
    .commit(); 

편집 마십시오 NA에 다시 수 없습니다

계층을 아래로 움직이면이 특정 경우의 문제를 피할 수 있지만 해결하려는 일반적인 문제는 다음과 같습니다.

항목에 '다음'옵션이 있고 '항목 관리'보기가 항목을 탐색하는 동안 도달해야합니다.

'항목 관리'에서 돌아가서 이전에 방문한 항목으로 돌아갈 것으로 예상됩니다.

그래서 나는 A -> B -> Manage Items을 탐색합니다.

'아이템 관리'에서 아이템 A를 삭제하고 뒤로 밀면 아이템 B의 프래그먼트가 나타납니다. 괜찮습니다. 다시 누르면 삭제 된 항목 A를 가리키는 조각이로드되어 DB에서 지금 삭제 된 데이터를로드하려고 할 때 문제가 발생합니다.

순간에 내가 가진 유일한 해결 방법은 누락 된 항목에 대한 조각을 다시 할 때 onCreateView에서 문제를 감지하고, popBackStack()

답변

0

를 사용하여 '탈출'당신이 정말로 때 다시 스택을 유지해야합니까 너는 너의 명부에 돌아 간다? 그 시점에서 안드로이드 홈 화면에서 뒤로 키가 장치에서 실행중인 이전 응용 프로그램으로 이동하지 않는 것과 비슷한 지점에서 다시 스택을 지울 것으로 예상했을 것입니다.

목록 조각의 onResume에서 백 스택을 지워서이 작업을 수행 할 수 있습니다. 목록의 시작점은 항상 경우, 당신은 사용할 수 있습니다 : 당신은 때때로 당신이 목록에 도착하기 전에 다시 스택을 유지해야하는 경우

FragmentManager fm = getFragmentManager(); 
while (fm.popBackStackImmediate()) { 
} 

는, 당신은 다른 popBackStackImmediate의 품종이 지정 중 하나를 사용할 수 있습니다 반환 할 ID 또는 이름.

+0

목록에서 위로 갈 때 스택에서 하위 조각을 지우는 것이 좋습니다. 조언을 주셔서 감사합니다! popBackStackImmediate()를 사용할 때 이전 조각의 깜박임이 있었으므로 다음과 같이했습니다. 'for (int framesLeft = fm.getBackStackEntryCount(); framesLeft> 0; --framesLeft) fm.popBackStack(); ' 기록에있는 항목을 삭제할 수있는 경우 대소 문자를 처리하는 방법을 알고 싶습니다. – Knotgrund

+0

걱정하시는 점을 더 설명해 주시겠습니까? 세부 정보 조각 중 하나에서 수행 할 작업이있을 수 있다는 것을 의미합니까? 사용자가 목록에 올라갈 때 다시 스택에서 조각을 팝하지 않고 그 작업을 수행하려고합니다. 이 추측이 맞으면 프래그먼트의 onPause를 재정의 할 수 있습니다. – Bruce

관련 문제