안드로이드 뷰페이저 갱신 질문입니다.
조회수 1872회
안녕하세요. 연휴는 잘 보내셨는지요. 다름이 아니라 연휴간 해결하지 못한 문제를 질문드리려고 합니다.
레이아웃에 탭 3개를 프래그먼트를 이용하여 뷰페이저를 구성하였는데요.
프래그먼트 탭A 에서 EditText를 이용해 스트링값을 입력 받고 아래 버튼을 누르면
번들을 이용해 값을 탭을 감싸고 있는 메인클래스에 값을 세팅시키고
프래그먼트 탭B 에 있는 TextView에 값이 그대로면 계속해서 저장되있고 다시 탭A에서
다른값을 입력하고 버튼을 눌렀을때 값이 변경되게 하려고 합니다.
구글링하면서 성공을 시킨 방법이 있는데 탭을 넘길때 전체적인 퍼포먼스가
너무 느려져서 다른방법을 찾고있습니다.
현재 소스로는 앱을 종료시켰다가 다시 켰을때 이전에 입력값이 표시는 됩니다.
다만, 입력 후 탭을 옴겼을때 바로 갱신이 되질 않네요.
비슷하게 구현된 예제를 아시거나 ,아시는 내용이 있으시면 답변해주시면 감사하겠습니다.
아래 관련 소스 첨부합니다.
// 프래그먼트 탭A에서 클릭 이벤트 리스너 내부
childDate = childBirth.getText().toString();
Bundle arguments = new Bundle();
arguments.putString("name", childDate);
MainTab.setArguments(arguments);
// 메인 클래스 겟터 셋터
public static void setArguments(Bundle arguments) {
MainTab.arguments = arguments;
}
public static Bundle getArguments() {
return arguments;
}
// 프래그먼트 탭B onCreateView
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_educationinfo, container, false);
Bundle bundle = MainTab.getArguments();
if (bundle != null) {
String name = bundle.getString("name");
TextView txt = (TextView) v.findViewById(R.id.test);
txt.setText(name);
}
return v;
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
올려주신 코드를 보면 setArguments() 함수를 이용해서 값을 전달하는데요. 이 함수는 프래그먼트가 액티비티에 attach 되기 전에만 사용할 수 있습니다. 즉, 프래그먼트 생성 시 파라미터를 넘기기 위한 용도이고요. 이미 만들어진 프래그먼트로는 값을 전달 할 수 없습니다.
질문을 한번 더 정리하면 프래그먼트A에서 프래그먼트B로 데이터를 넘기고 싶은데 잘 안된다는 내용으로 이해를 했고요. 만일 그런 것이라면 아래 링크의 내용을 읽어보시고 뷰페이저를 이용해서 프래그먼트에 직접 접근하는 방법을 사용해보시기 바립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 답변 정말 감사드립니다! 좋은하루되세요~ 알 수 없는 사용자 2016.10.4 13:06
- 이 접근방법을 이용해 문제 해결하였습니다. 다시 한번 감사드립니다~ 알 수 없는 사용자 2016.10.5 09:13
-
댓글 입력