旋转和碎片的Android问题

时间:2015-07-21 13:57:54

标签: android rotation fragment

将最新的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项目创建时提供的片段定义。我已经对此进行了一些搜索,但没有找到充气机在重新创建碎片时出现旋转问题的原因。

否则没有轮换似乎一切正常。

1 个答案:

答案 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;
    }
}

我的测试任务是异步任务。我希望它有所帮助。