良い一日にキャストすることはできません。それが電話で動くとき、それはOKです。私は携帯電話かタブレットかを表示するために2種類のレイアウトを使用しています。リストビューを実装する2つのフラグメントとその詳細についてもう1つのフラグメントがあります。android.support.v7.widget.AppCompatTextViewは、私はタブレット上で実行されたときにのみ起こるキャスト例外が生じています</p> <p>android.widget.RatingBar
電話の場合、MainActivityはシングルモードで動作していることを検出し、ダミーアクティビティを起動して詳細フラグメントを起動します。デュアルモードの場合、フラグメントを呼び出してその詳細を表示するだけです。これは、常にlistviewの項目をクリックするとトリガされます。これは、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>
とタブレットのための:
<?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)
ありがとう!!
私に正しい方向を指してくれてありがとう。それはまさにそれでした。 list_itemのxmlには異なる宣言があります – Javi