우리는 HTTP 포스트를 통해 XML 파일을 제공하는 웹 서비스를 가지고 있습니다.머리에이 못을 박아 야합니다 ... onConfigurationChange를 유지하는 조각과 뷰
이 XML 파일을 객체로 다운로드하고 구문 분석하여 FragmentPagerAdapter
에 보관 된 몇 조각의 일부보기를 채 웁니다. 나는이 XML 파일을 AsyncTask
을 통해 얻었고, 그것은 내 조각들에게 프로세스가 리스너 인터페이스를 통해 끝났음을 알려줍니다.
거기에서 웹 서비스에서 반환 된 데이터로 프래그먼트 내부의 뷰를 채 웁니다. 오리엔테이션이 바뀔 때까지 괜찮습니다. 내가 이해하는 것으로부터, ViewPager
의 어댑터는 생성 된 파편을 유지하기로되어 있는데, 이는 괜찮 으면서 어떤 일이 일어나기를 원하며, 프래그먼트의 onCreateView
메쏘드가 여전히 뷰를 리턴하도록 호출된다는 것을 안다. 마지막 날이나 여기에 게시물과 Google 문서 도구 등을 통해 사냥을했는데 내가하고 싶은 일을 할 수있는 구체적인 방법을 찾을 수 없습니다. 조각을 유지하고 이미 채워진보기이므로 방향이 바뀔 때 간단히 복원하고 웹 서비스에 불필요한 호출을 피하십시오.
일부 코드 조각 :이 문제의 전체 조각이
public void Refresh(Integer month, Integer year) {
if (mUpdater == null) {
mUpdater = new UsageUpdater(this);
// mUpdater.setDataListener(this);
}
if (isConnected()) {
mUpdater.Refresh(month, year);
usingCache = false;
mProgress.show();
} else {
mUpdater.RefreshFromCache();
usingCache = true;
}
}
주요 활동에
mViewPager = (ViewPager) findViewById(R.id.viewpager);
if (mViewPager != null) {
mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
}
if (savedInstanceState == null) {
if (CheckCredentials()) {
Refresh(0,0);
} else {
ShowCredentialsDialog(false);
}
}
새로 고침 방법 ..., 마이너스 일부 :
주요 활동onCreate
에서
텍스트 뷰 등에서 텍스트 설정을 표시하는 것이 중요하지 않으므로 UI에 코드를 채우는 것입니다.
public class SummaryFragment extends Fragment implements Listeners.GetDataListener {
private static final String KEY_UPDATER = "usageupdater";
private UsageUpdater mUpdater;
private Context ctx;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.ctx = activity;
}
private View findViewById(int id) {
return ((Activity)ctx).findViewById(id);
}
public void onGetData() {
// AsyncTask interface method, will be called from onPostExecute.
// Populate view from here
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_usagesummary, container, false);
mUpdater = (UsageUpdater) getArguments().getSerializable(KEY_UPDATER);
mUpdater.setDataListener(this);
return view;
}
}
onCreateView
에서 빈보기를 반환하지만이 조각을 유지하고 데이터가 미리 채워져 있고 모든 웹 서비스 호출을 관리하는 방법을 모르겠다면 주요 활동.
당신이 말할 수없는 경우에, 안드로이드는 나를위한 기본 언어가 아니며 이것은 아마도 엉성한 것처럼 보일 것입니다. 어떤 도움이라도 나는 좌절감을 느끼고 있습니다. 활동이 다시 생성 될 때 당신이 어떤 다른 자원을 사용하지 않는 경우
내가 그 일을 방지하고, 그래서이 가장 좋은 방법은 반대 읽었습니다 :이 컨텍스트의 누수가 발생할 것입니다 이후 활동이 다시 생성 된 경우 같은, 미리 채워보기. 또한 휴대 전화가 가로 방향 인 경우 세로보기를 유지하고 싶지 않습니다. 응용 프로그램을 많이 사용하기 때문에 수행 할 수있는 작업을 수행 할 수 있음을 알고 있지만이를 달성하기위한 올바른 방법을 찾으려고합니다. – Karl
그러면 MainActivity 레이아웃에'ViewPager'와'FragmentPagerAdapter'를 포함하는'Fragment'와 어댑터를 지원하는 데이터를 넣을 것입니다. 최상위 조각의 onSaveInstanceState()에서 현재보기를 백업하는 데이터를 저장하십시오. ... outState.putString (key, string); //보기 등을지지하는 모든 데이터에 대해 등. ... 다음 최상위 조각의 onCreateView()에서 : ... 경우 (! savedInstanceState = NULL) { //하면 조각에 데이터를 넣고, 선택한 페이지를 변경하여, 어댑터를 다시 만들어 상태를 복원 등 } – sddamico
이것은 나를 위해 잘 작동했습니다. 감사합니다. – Karl