Vyg*_*s B 0 android casting view
我有这样的布局
pie_chart.xml
<?xml version="1.0" encoding="utf-8"?>
<com.github.mikephil.charting.charts.PieChart
android:layout_width="match_parent"
android:id="@+id/piechart"
android:layout_height="200dp"
android:background="#F00"
xmlns:android="http://schemas.android.com/apk/res/android" />
Run Code Online (Sandbox Code Playgroud)
我正在尝试将PieChart类型转换为View I inflated.我正在使用MPAndroidchart绘制图形.PieChart的父类扩展了VieGroup,所以我假设Cast上的Casting PieChart类型应该是正确的,但是这给了我一个错误.
导致问题的代码:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_overview, container, false);
View pieView = View.inflate(AppContext.context, R.layout.pie_chart,(ViewGroup)view);
PieChart pieChart= (PieChart) pieView;
return view;
}
Run Code Online (Sandbox Code Playgroud)
logcat的:
java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to com.github.mikephil.charting.charts.PieChart
at com.teltonika.rms.fragment.OverviewFragment.onCreateView(OverviewFragment.java:31)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298)
at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1998)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:709)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Run Code Online (Sandbox Code Playgroud)
你来了
java.lang.ClassCastException:android.widget.LinearLayout无法强制转换为com.github.mikephil.charting.charts.PieChart
一个ClassCastException异常是由Java的当您尝试施放一个数据类型的对象到另一个抛出.
问题始于
PieChart pieChart= (PieChart) pieView; // Don't do this
Run Code Online (Sandbox Code Playgroud)
试试这种方式
View pieView = View.inflate(AppContext.context, R.layout.pie_chart,(ViewGroup)view);
PieChart pieChart= (PieChart) pieView.findViewById(R.id.piechart);
Run Code Online (Sandbox Code Playgroud)
经过一番研究后,我发现如果我为 View.inflate() 方法提供根视图,它将返回带有我的膨胀视图的新根视图,但如果我为 View.inflate() 方法添加 null ,它将返回我的仅膨胀视图。
例如
这将返回,Linearlayout
因为view
根视图是 LinearLayout
LinearLayout pieView = View.inflate(AppContext.context, R.layout.pie_chart,(ViewGroup)view);
Run Code Online (Sandbox Code Playgroud)
但如果我添加 null ,它会膨胀我提供的视图。对于本例,它是饼图
PieChart pieView = View.inflate(AppContext.context, R.layout.pie_chart,null);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1213 次 |
最近记录: |