http://www.masterqna.com/android/95609/%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0-%ED%94%84%EB%9E%98%EA%B7%B8%EB%A8%BC%ED%8A%B8-%EA%B0%9D%EC%B2%B4-%EC%A0%84%EB%8B%AC%EA%B3%BC-%ED%94%84%EB%9E%98%EA%B7%B8%EB%A8%BC%ED%8A%B8-%EB%A7%A4%EB%8B%88%EC%A0%80%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A7%88%EB%AC%B8
얼마전에 링크의 질문을 올렸었는데요
액티비티에서 -> 프래그먼트로 데이터 보낼시 getParcelable에서 에러가나고
원인이 xml파일의 <fragment>태그 였다..는 대충 이런 질문이었는데요..
그래서 답변자님께서 조언해주신대로
.
MainActivity.java
public class MainActivity extends AppCompatActivity {
SampleData data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ShowFragment showFragment = (ShowFragment) getSupportFragmentManager().findFragmentById(R.id.showfragment);
if(showFragment != null)
Log.d("프래그먼트 확인", "프래그먼트 확인");
data = new SampleData("ABCD", "20201031");
Bundle bundle = new Bundle();
bundle.putParcelable("key", data);
showFragment.setArguments(bundle);
}
}
ShowFragment.java
public class ShowFragment extends Fragment {
SampleData sampleData;
TextView textView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
sampleData = bundle.getParcelable("key");
Log.d("확인용", "title : " + sampleData.title);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container2,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_show, container2, false);
textView = rootView.findViewById(R.id.title);
textView.setText(sampleData.title);
return rootView;
}
}
으로 시도를 해보았는데요 그럼에도 불구하고 똑같이 에러가 납니다...
솔직하게 이번에는 될줄알았습니다 왜냐면 이전에는
xml에 <fragment> 를 사용해서 자동적으로 인플레이션인 상황에서
거기서 또 프래그먼트 매니저를 사용하려 했으니(정확하게는 맞는지 모르겠네요) 안되었지만..
이번에는 <fragment>로 자동으로 인플레이션되어 생성되는 프래그먼트를 참조하기위해
getSupportFragmentManger().findFragmentBtId 를 사용해 해당 프래그먼트를 참조해서 사용하려 했음에도
똑같은 에러가나는데..
도대체 원인이 뭔가요..? getSupportManager가 <fragment>가 생성되는 액티비티의 프래그먼트 매니저를
단순 참조가아니라 생성해내는 구조인가요? 그래서 프래그먼트 매니저가 두개라서 오류가나는건지..
이번에는 잘 될줄알았는데 이유를 모르겠습니다..