2016-07-02 2 views
0

이것은 제가 지금 겨루고있는 이상한 오류입니다.이미 조각이 SwipeRefreshLayout으로 추가되었습니다.

일단 초기화가 완료되면 검색 조각을 표시하는 활동이 있습니다. 검색 단편은 결과를 표시하는 listview를 포함하며 사용자가 검색 결과를 새로 고칠 수 있도록 목록보기가 SwipeRefreshLayout 내에 있습니다.

사용자가 목록에서 항목을 선택하면 검색 조각이 제거되고 상위 활동이 표시됩니다 (다른 조각이 있음). 사용자는 원하는 경우 검색 조각을 열고 결과를 새로 고칠 수 있습니다.

내가 가진 동작은 조각을 처음 열 때 새로 고침을 사용하면 예상대로 작동한다는 것입니다. 그러나 검색 단편을 닫은 다음 다시 열어 새로 고침을 위해 아래로 스 와이프하면 검색 단편에 대해 java.lang.IllegalStateException: Fragment already added 예외가 발생합니다.

검색이 처음 단편화 소개하는 코드는 다음과 같습니다

case MotionEvent.ACTION_UP: 
    if (swipeInRange) { 
     /* do some other stuff */ 
     getFragmentManager().beginTransaction().setCustomAnimations(R.animator.slide_in_left, 0, 0, R.animator.slide_out_left).add(R.id.main_vwContent, mWoSearchFragment).commit(); 
    } 
    break; 

가 슬로우 오류가 없습니다 : 코드가 화면에 슬쩍 작업을 통해 도입

@Override 
protected void onPostExecute(Void empty) { 
    dismissSearchProgress(); 
    getFragmentManager().beginTransaction(). 
     setCustomAnimations(R.animator.slide_in_left, 0, 0, R.animator.slide_out_left). 
     add(R.id.main_vwContent, mWoSearchFragment).commit(); 
} 

두 번째 시간 두 번째 인스턴스에서 아래로 스 와이프하여 새로 고침하지 않는 한 onRefresh 이벤트가 발생하기 전에 오류가 발생합니다.

누구든지 아이디어가 있습니까? 어떤 코드가 스택 추적에서 내 코드를 가지고 있지 않고 디버거가 아무 것도 잡아 내지 못하기 때문에 검색 조각을 다시 추가하려고 시도하는 코드가 무엇인지 확실하지 않습니다.

답변

0

문제를 작성하는 것이 당신에게 어떤 효과가 있는지 알고 있습니다. 문제는 사용자가 특정 화면 위치에서 스 와이프해야하는 부분을 여는 것입니다. 따라서 MotionEvent.ACTION_DOWN에서 우리는 목표 영역 내에서 시작했는지 확인하고 플래그를 설정합니다. 그런 다음 'MotionEvent.ACTION_UP'에 조각이 추가됩니다. 그러나 SwipeRefreshLayout의 경우 'MotionEvent.ACTION_DOWN'이벤트를 차단하지만 'MotionEvent.ACTION_UP'을 스택에 푸시합니다.

제 경우에는 조각을 추가하기 위해 스 와이프하기 전에 취한 마지막 동작으로 플래그가 여전히 true로 설정되었습니다.

검색 단편을 추가 할 때 플래그가 false로 재설정되었는지 확인해야했습니다.

관련 문제