gpt4 book ai didi

android - 在开始新 Activity 、更改新 Activity 的方向并按下后退按钮后,加载程序不会保留

转载 作者:太空狗 更新时间:2023-10-29 13:30:12 26 4
gpt4 key购买 nike

我最近遇到了加载程序的问题。我创建了一个重现问题的小项目 https://github.com/solcott/loaders-orientation-change

我有一个添加 fragment 的简单 Activity

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment mainFragment = getFragmentManager().findFragmentById(R.id.main_fragment);
if(mainFragment == null){
Log.w(getClass().getSimpleName(), "creating new Fragment");
mainFragment = new MainFragment();
getFragmentManager().beginTransaction().add(R.id.main_fragment, mainFragment).commit();
}
}
}

在我的 fragment 中,我启动了一个加载器,它只返回一个显示在屏幕上的整数。还有一个启动新 Activity 的按钮:

public class MainFragment extends Fragment implements LoaderCallbacks<Integer> {

private static int NEXT_VAL = 0;

TextView text1;

Button button1;

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(1, null, this);
}

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
text1 = (TextView) view.findViewById(android.R.id.text1);
button1 = (Button) view.findViewById(android.R.id.button1);
button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), NextActivity.class));
}
});
}

@Override
public Loader<Integer> onCreateLoader(int id, Bundle args) {
AsyncTaskLoader<Integer> loader = new AsyncTaskLoader<Integer>(
getActivity()) {

@Override
public Integer loadInBackground() {
return NEXT_VAL++;
}
};
loader.forceLoad();
return loader;
}

@Override
public void onLoadFinished(Loader<Integer> loader, Integer data) {
text1.setText(data.toString());
}

@Override
public void onLoaderReset(Loader<Integer> loader) {
// TODO Auto-generated method stub

}

}

到目前为止,一切正常,我可以更改方向,但显示的整数不会改变。我什至可以开始新 Activity ,然后点击后退按钮,显示的整数不会改变。

但是,当我导航到新 Activity、更改方向并按下后退按钮时,整数会增加。我希望它的行为方式与没有方向改变时的行为方式相同。

在 Fragment.onCreate() 中调用 setRetainInstance(true) 会使情况变得更糟。永远不会调用 onLoadComplete 并且根本不会显示整数。

有没有其他人遇到过这个问题并找到了解决方法?

最佳答案

与此处提出的相同问题:Loader unable to retain itself during certain configuration change

这是 AsyncTask 加载器的一个该死的恼人问题。尽管该线程中提出了解决方案,但我认为普遍的共识是避免使用 AsyncTaskLoaders。

关于android - 在开始新 Activity 、更改新 Activity 的方向并按下后退按钮后,加载程序不会保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com