美好的一天
我有一个强制转换异常,只有在平板电脑上执行时才会发生。当它在手机上运行时就可以了。我使用两种类型的布局来显示手机或平板电脑。我还有两个片段实现了listview,另一个片段实现了它的细节。
对于手机的情况,MainActivity检测到我们正在单一模式下运行并启动虚拟活动以启动详细信息片段。当双模式时,它只是调用片段来显示其细节。这总是在列表视图的项目点击时触发。这是在MainActivity中调用的方法。
@Override
public void onItemSelected(Uri wifi)
{
if (wifi != null)
{
if (!mDualFragments)
{
// If showing only FragmentList, start the DetailActivity and
// pass it the info
Intent intent = new Intent(this, DetailActivity.class);
intent.setData(wifi);
startActivity(intent);
}
else
{
// If showing both fragments, directly tell FragmentDetail to update
FragmentDetail mFragmentDetail = (FragmentDetail) getFragmentManager()
.findFragmentById(R.id.mFragment_detail);
mFragmentDetail.updateFragmentDetail(wifi);
}
}
}
这是崩溃的FragmentDetail部分:
public void updateFragmentDetail(Uri wifi)
{
mCurrentWifiUri = wifi;
if (mCurrentWifiUri != null)
{
getActivity().setTitle(R.string.title_editor_activity);
// Initialize a loader to read the wifi data from the database
// and display the current values in the editor
getLoaderManager().initLoader(EXISTING_WIFI_LOADER, null, this);
}
mNameText = (TextView) getActivity().findViewById(R.id.wifi_name);
mGeoText = (TextView) getActivity().findViewById(R.id.wifi_geo);
mInfoEditText = (EditText) getActivity().findViewById(R.id.wifi_info);
mOpinionRatingBar = (RatingBar) getActivity().findViewById(R.id.wifi_opinion);
mOpinionRatingBar.setOnRatingBarChangeListener(null);
}
这是不同布局的content_main:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_height="match_parent">
<fragment
android:id="@+id/mFragment_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="eu.javimar.wirelessvlc.view.FragmentList" />
</RelativeLayout>
和TABLET:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:baselineAligned="false"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="eu.javimar.wirelessvlc.MainActivity"
tools:showIn="@layout/activity_main">
<fragment
android:id="@+id/mFragment_list"
android:layout_weight="30"
android:layout_width="0px"
android:layout_height="match_parent"
class="eu.javimar.wirelessvlc.view.FragmentList" />
<fragment
android:id="@+id/mFragment_detail"
android:layout_weight="70"
android:layout_width="0px"
android:layout_height="match_parent"
class="eu.javimar.wirelessvlc.view.FragmentDetail" />
</LinearLayout>
这是我在平板电脑中执行时遇到的错误:
Process: eu.javimar.wirelessvlc, PID: 4530
java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.widget.RatingBar
at eu.javimar.wirelessvlc.view.FragmentDetail.updateFragmentDetail(FragmentDetail.java:72)
at eu.javimar.wirelessvlc.MainActivity.onItemSelected(MainActivity.java:362)
at eu.javimar.wirelessvlc.view.FragmentList$1.onItemClick(FragmentList.java:112)
谢谢!
答案 0 :(得分:1)
它看起来像是一个声明错误。请检查您在java文件中声明的文本视图变量,该变量可能被声明为评级栏。或者检查mNameText或mGeoText。
问题在于你xml(id&#39; s不匹配)或java中,你声明你的TextView变量,并将它绑定到一个视图(错误的视图,因为它找到了RatingBar,正如我在你的错误中看到的那样)。