2016-06-28 6 views
0

ViewPager에 FragmentX가 있습니다. FragmentX에는 EditText가 있고 Button이 있습니다. 사용자가 Button을 누르고 FragmentY가 FragmentX를 대체합니다. 그런 다음 사용자는 뒤로를 누르고 FragmentX는 사용자로부터 입력을 모두 손실합니다.조각 데이터를 저장하고 popbackstack 이후에 채우기

어떻게 할 중 하나

FragmentY이

(회신하지 마십시오 데이터를 검색하고 FragmentX에 글고 년대를 입력 한 후 FragmentY가 FragmentX로 대체 표시하기 전에) FragmentX의 데이터를 저장 이은 조각하지 않으면 작동하지 않습니다이 경우는

B)하지 않은, 파괴로 우리가 FragmentY에서 FragmentX에 갈 때이 때문에 OnSaveInstanceState) 어떻게 든 .. FragmentX의 데이터를 유지

제안이 있습니까?

+0

뷰 페이지의 조각 수? – USKMobility

+0

뷰 페이지의 세 번째 조각입니다. – Nickmccomb

+0

try mViewPager.setOffscreenPageLimit (3); fragmentPager 어댑터를 사용하면 – USKMobility

답변

0

Google이 귀하의 단편에 선언 된 인터페이스를 제공하고 구현하고 해당 번들 또는 원하는 모든 객체를 활동에 저장하는 것이 좋습니다. 그런 다음 newInstace() 정적 팩터 리 메서드에서 해당 번들을 전달하고 평소대로 데이터를 다시 작성합니다. ViewPager를 사용하고 있고 버튼이 눌러지기 전에 항상 두 번째 조각을 렌더링합니다 (두 번째 조각이 다른 탭에 있다고 가정합니다). 그래도 인터페이스를 통해 관리해야합니다. 뒤로 버튼을 누르면 데이터가 파괴되지 않는 한 계속 데이터가 그대로 유지되며 그 경우에도 onSaveInstaceState()을 구현해야합니다. setRetainInstance (boolean retain)를 사용할 수도 있습니다. 자세한 내용은 here을 참조하십시오.

0

addToBackStack()을 사용하면 도움이 될 수 있습니다. 백 스택에서 프래그먼트로 돌아 가면 프래그먼트를 다시 만들지 않지만 동일한 인스턴스를 다시 사용하고 프래그먼트 수명주기에서 onCreateView()으로 시작합니다 (Fragment lifecycle 참조).

상태를 저장하려면 인스턴스 변수를 사용하고 이 아닌onSaveInstanceState()에 의존해야합니다.

확인이 아웃 : Maintaining fragment states

+0

내가 addToBackStack()를 사용하고있어, 문제는 백 스택에 추가하는 것은 사용자가 조각에 입력 한 것을 저장하지 않는다는 것이다. 그래서 조각이 백 스택에서 호출되어 보여지면 데이터는 사라진다. . – Nickmccomb

+0

'getSupportFragmentManager(). beginTransaction(). addToBackStack ("fragment1"). replace (R.id.mainFragmentHolder, new YourFragment()). commit();'작동해야합니다. 조각을 호출하는 코드를 pl에 포함시킬 수 있습니까? 기본 비헤이비어를 무시하지 않으면 데이터가 남아 있어야합니다. –

+0

두 번 확인하십시오. 그 대답은 구식입니다. ViewPager가 작동하는 방식 때문에 내 업데이트 된 답변을 참조하십시오. – Chisko

0

내가 지금 된 SharedPreferences에 FragmentX에 데이터를 저장하고 있고 활동에 onBackPressed 재정의하고 popBackStack()가 발생 popFromBackstack라는 활동에서 함수를 만들었습니다.

필자의 Fragments를 대체하는 내 액티비티에서는 대체하기 전에 FragmentX의 데이터를 SharedPrefs에 저장하고 있습니다. 또한 새로운 Fragment가 FragmentX 인 경우 교체 후 점검 중이며, 그렇다면 SharedPrefs에서 FragmentX로 데이터를 채 웁니다.

내 활동 (현재 조각이 FragmentX 인 경우)에서 onBackPressed의 FragmentX에있는 데이터를 저장하는 중입니다. 사용자가 뒤로 단추를 누르면됩니다.

또한 액티비티에서 backstack을 팝하기 위해 Fragments에서 호출하는 popBackStack()이라는 정적 정적 활동을 만들었습니다. 나는 또한 여기에 FragmentX에서 데이터를 저장하고있다 (현재 파편이 FragmentX 인 경우). 조각이 튀어 나오면 나는 새 조각이 FragmentX인지 확인하고 있습니다. 그럴 경우 데이터를 채 웁니다.

길쭉한 접근 방식이지만 다른 안정적인 방법을 찾을 수 없습니다. 이것은 완벽하게 작동합니다.