将最新的Android Studio与带有片段的项目一起使用。一切都很好,直到用碎片旋转屏幕。得到错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xx/com.xxx.xxx.MainActivity}:
android.view.InflateException: Binary XML file line #7: Error inflating class fragment
主要活动的xml如下所示
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/fragment"
android:name="com.xxx.xxx.MainActivityFragment"
tools:layout="@layout/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
第7行是Android Studio项目创建时提供的片段定义。我已经对此进行了一些搜索,但没有找到充气机在重新创建碎片时出现旋转问题的原因。
否则没有轮换似乎一切正常。
答案 0 :(得分:0)
你应该有这样的构造函数:
public class TestClass extends Fragment {
private View mView= null;
public TestClass() {
setRetainInstance(true);
}
最好还有onResume,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_report_list, container, false);
mListView = (AbsListView) mView.findViewById(android.R.id.list);
Task reportTask = new Task(mView);
reportTask.execute();
return mView;
}
@Override
public void onResume(){
super.onResume();
Task reportTask = new Task(mView);
reportTask.execute();
}
不要忘记捕捉异常。抓住它,什么都不做!
private void showProgressDialog() {
if (mDialog == null) {
mDialog = new ProgressDialog(getActivity());
mDialog.setMessage("Loading. Please wait...");
mDialog.setIndeterminate(false);
mDialog.setCancelable(true);
}
mDialog.show();
}
private void dismissProgressDialog() {
try{
if (mDialog != null && mDialog.isShowing()) {
mDialog.cancel();
mDialog.dismiss();
}
}catch (IllegalArgumentException ex){
//do nothing
}finally {
mDialog = null;
}
}
我的测试任务是异步任务。我希望它有所帮助。