我在addView()
收到错误。屏幕以纵向开始。我将其更改为横向,现在当我尝试切换到纵向时,它会抛出错误。
(PORTRAIT开始) - > LANDSCAPE - > (PORTRAIT例外)
图表---- 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 :(得分: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());
}
}