0

때로는 백그라운드에서 응용 프로그램이 죽으면 나는 활동의 현재 조각을 복원하려고 해요. 난 onSaveInstanceState()에 현재 조각을 저장하려면 putFragment()을 사용하고 onRestoreInstanceState()getFragment()을 사용하면 응용 프로그램이 죽기 전에 현재 조각을 저장 한 인스턴스를 가져올 수 있습니다. 이는 호스팅 활동에서 수행됩니다. MainActivity에서조각 두 번 다시

onSaveInstanceState() MainActivity에서

@Override 
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { 

    getSupportFragmentManager().putFragment(outState, "fragment", getSupportFragmentManager() 
      .findFragmentById(R.id.mainfrag)); 

    super.onSaveInstanceState(outState, outPersistentState); 
} 

onRestoreInstanceState()는() : I 테스트 SubCat() 단편을 사용

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    Fragment current = getSupportFragmentManager().getFragment(savedInstanceState, "fragment"); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    if (current instanceof SubCat) { 
     current = new SubCat(); 
    } 
    ft.replace(R.id.mainfrag, current); //error-line (MainActivity.java:185) 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

, 단지의 단편 중 하나 애플 리케이션, 그래서 때 SubCat() 조각 전경/시각적으로 나는 의도적으로 배경에 전체 애플 리케이션을 넣어 또는 내가 애플 리케이션을 최소화하고 몇 t 후 ime, 내가 앱으로 돌아 왔을 때 마지막 조각 (이 경우 SubCat())이 다시 복원되지만 조각의 일부 인스턴스도 저장해야합니다.

이제 문제는 조각 처음 cat_id의 실제 값이 onActivityCreated()에 번들에서 검색에서 두 번 다시 작성,하지만 일부는 조각을 다시 재현되어 있으며,이 때 onActivityCreated()가 호출되지 않습니다 어떻게 가치를 만드는 것입니다 cat_id null입니다.

조각 : 나는 내가 잘못하고있는 무슨 모르는

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    arr = new ArrayList<>(); 

    if (getArguments() != null) { 
     String[] data = getArguments().getStringArray("cat_data"); 
     cat_id = data[0]; 
     cat_name = data[1]; 
    } 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    if (view == null) { 
     view = inflater.inflate(R.layout.fragment_sub_category, container, false); 

     progress = view.findViewById(R.id.progress); 
     layoutManager = new LinearLayoutManager(getActivity()); 
     recyclerView = view.findViewById(R.id.recycler); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(layoutManager); 

     subCatAdapter = new SubCatAdapter(arr, getActivity()); 
     recyclerView.setAdapter(subCatAdapter); 

     subCatAdapter.setOnClickListener(this); 

     doThis(); //request data from server 
    } 

    return view; 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    outState.putString("cat_id", cat_id); 
    outState.putString("cat_name", cat_name); 

    super.onSaveInstanceState(outState); 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    if (savedInstanceState != null) { 
     cat_id = savedInstanceState.getString("cat_id"); 
     cat_name = savedInstanceState.getString("cat_name"); 
    } 
} 

가 사전에 감사를 도와주세요.

+0

오류를 공유하십시오. – YoLo

+0

오류가 없습니다. cat_id는 빈 값을 반환하며, 앱이 백그라운드로 이동하기 전에 값을 가지고 있습니다. –

답변

0

마침내 나는 MainActivity에서 onSaveInstanceState()onRestoreInstanceState()을 제거하여이 문제를 해결했습니다. onCreateView()fragment으로 복원하는 것은 다소 불필요합니다. fragmentactivity에 복원하고 fragment의 상태를 복원하는 것이 다소 불필요합니다. onCreateView()fragment입니다. 따라서 프래그먼트 상태 만 복원하면 작업이 완료됩니다.