2015-07-21 78 views
0

在带有片段的项目中使用最新的Android Studio。一切都很好,直到旋转屏幕的一个片段。得到的错误带旋转和片段的Android问题

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

您是否有不同的横向布局布局?或者,也许问题出现在'fragment_main'布局中? – Karakuri

回答

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

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