방향 변경시 인스턴스를 유지하도록 내 조각을 가져올 수 없습니다.조각의 setRetainInstance (true) 메서드가 작동하지 않는 이유는 무엇입니까?
활동 클래스
public class MyActivity extends Activity
{
private MyFragment fragment;
public void onCreate(Bundle savedInstanceState)
{
if(savedInstanceState == null)
{
fragment = new MyFragment();
}
//null pointer exception on this line of code. fragment not being retained.
getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
}
}
조각 클래스
public class MyFragment extends Fragment
{
private View view;
private CustomListViewAdapter adapter;
public ArrayList<HashMap<String, String>> arrHashMap;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
view = inflater.inflate(R.layout.fragment_screen, container, false);
if(arrHashMap != null)
{
ListView lv = (ListView) view.findViewById(R.id.fragment_lv);
adapter = new CustomListViewAdapter((MyActivity)getActivity() , arrHashMap);
lv.setAdapter(adapter);
lv.setOnItemClickListener((MyActivity)getActivity());
}
else
{
/* some code to create arrHashMap variable
*/
ListView lv = (ListView) view.findViewById(R.id.fragment_lv);
adapter = new CustomListViewAdapter((MyActivity)getActivity() , arrHashMap);
lv.setAdapter(adapter);
lv.setOnItemClickListener((MyActivity)getActivity());
}
return(view);
}
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
}
MyFragment는 onActivityCreated에 설정되는 (참) setRetainInstance에도 불구하고 오리엔테이션 변화에 null이 남아있다. MyActivity가 만들어지면 MyFragment도 항상 다시 만들어집니다. 또한 setRetainInstance (true)는 UI 조각에 사용되지 않는다는 것을 이해합니다. 그러나 저장된 어댑터 또는 뷰 멤버 변수를 사용하고 있지 않습니다. 어댑터를 다시 만들 수 있도록 유지 된 arrHashMap 변수를 방향 변경에만 재사용하고 있습니다. UI를 변경하십시오.