2016-06-02 1 views
1

Я получаю сообщение об ошибке addView(). Экран начинается с портрета. Я меняю его на пейзаж, и теперь, когда я пытаюсь переключиться на портрет, он выдает ошибку.ошибка в addView() в изменении Фрагмент макета при ориентации

(ПОРТРЕТ Start) -> ПЕЙЗАЖ -> (ПОРТРЕТ Exception)

диаграмма ---- https://github.com/PhilJay/MPAndroidChart

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
at android.view.ViewGroup.addViewInner(ViewGroup.java:3784) 
at android.view.ViewGroup.addView(ViewGroup.java:3637) 
at android.view.ViewGroup.addView(ViewGroup.java:3582) 
at android.view.ViewGroup.addView(ViewGroup.java:3558) 

Фрагмент

import android.app.Fragment; 

public class EDA_Fragment extends Fragment { 

    private Chart chart = null; 
    private View fragmentRootContainer; 

    @Override 
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     if(fragmentRootContainer == null) { 
      fragmentRootContainer = inflater.inflate(R.layout.activity_exam, container, false); 

      if (chart == null) 
       chart = new Chart((LineChart) fragmentRootContainer.findViewById(R.id.chart), EDA, 1023f, 1f); 

     } 
     return fragmentRootContainer; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setRetainInstance(true); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     LayoutInflater inflater = LayoutInflater.from(getActivity()); 
     LinearLayout linearLayout = (LinearLayout) getView(); 
     linearLayout.removeAllViewsInLayout(); 

     // Checks the orientation of the screen 
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 

      fragmentRootContainer = inflater.inflate(R.layout.activity_exam, linearLayout, false); 

      LineChart lineChart = (LineChart) fragmentRootContainer.findViewById(R.id.chart); 
      //((ViewGroup)lineChart.getParent()).removeView(lineChart); 
      lineChart.addView(chart.getChart()); 


     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 

      fragmentRootContainer = inflater.inflate(R.layout.activity_exam, linearLayout, false); 

      LineChart lineChart = (LineChart) fragmentRootContainer.findViewById(R.id.chart); 
      //((ViewGroup)lineChart.getParent()).removeView(lineChart); 
      lineChart.addView(chart.getChart()); 

     } 
    } 
} 

ответ

0

------ первого -------

Добавить это в AndroidManifest

android:name=".Activity.EDA_Activity" 
android:configChanges="orientation" 

------ второй ----------

in layout PORTRAIT add this -> android:orientation="vertical" 

    in layout LANDSCAPE add this -> android:orientation="horizontal" 

-------- третий -----------

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    LayoutInflater inflater = LayoutInflater.from(getActivity()); 
    LinearLayout linearLayout = (LinearLayout) getView(); 
    if(linearLayout != null) 
     linearLayout.removeAllViewsInLayout(); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 

     ViewGroup parentViewGroup = (ViewGroup)chart.getChart().getParent(); 
     if (parentViewGroup != null) 
      parentViewGroup.removeView(chart.getChart()); 

     fragmentRootContainer = inflater.inflate(R.layout.activity_exam, linearLayout, true); 
     LineChart lineChart = (LineChart) fragmentRootContainer.findViewById(R.id.chart); 
     lineChart.addView(chart.getChart()); 
    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 

     ViewGroup parentViewGroup = (ViewGroup)chart.getChart().getParent(); 
     if (parentViewGroup != null) 
      parentViewGroup.removeView(chart.getChart()); 

     fragmentRootContainer = inflater.inflate(R.layout.activity_exam, linearLayout, true); 
     inflater.inflate(R.layout.activity_exam, linearLayout, false); 

     LineChart lineChart = (LineChart) fragmentRootContainer.findViewById(R.id.chart); 
     lineChart.addView(chart.getChart()); 
    } 
}