2013-06-23 1 views
0

왜이 클래스 캐스트 예외가 발생하는지 잘 모르겠습니다. FragmentActivity에서 지원 버전 ListFragment를 사용하고 있습니다.클래스 캐스트 예외를 android.app로 캐스팅 할 수 없습니다. 조각

아래 내 활동은 입니다. com.thuptencho.transitbus.routes;

import java.util.List; 

import android.content.AsyncQueryHandler; 
import android.content.BroadcastReceiver; 
import android.content.ContentUris; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.database.Cursor; 
import android.database.MatrixCursor; 
import android.database.MergeCursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.CursorLoader; 
import android.support.v4.content.Loader; 
import android.support.v4.content.LocalBroadcastManager; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ListView; 
import android.widget.ProgressBar; 
import android.widget.Spinner; 
import android.widget.TextView; 
public class RouteDetailFragmentActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     L.log(); 
     mContext = this; 
     setContentView(R.layout.activity_route_detail); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     if (savedInstanceState != null) { 
      this.mRouteId = savedInstanceState.getInt(C.IntentExtrasKeys.ROUTE_ID); 
     } 
     else { 
      Intent i = getIntent(); 
      mRouteId = i.getIntExtra(C.IntentExtrasKeys.ROUTE_ID, C.DEFAULT_INVALID_ID); 
     } 

     String defaultAgency = PreferenceManager.getDefaultSharedPreferences(this).getString(C.Settings.DEFAULT_AGENCY, 
         "none"); 
     getActionBar().setTitle(defaultAgency.toUpperCase()); 

     LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
         new IntentFilter(C.Broadcast.ROUTES_SINGLE_UPDATED_ACTION)); 
     LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
         new IntentFilter(C.Broadcast.DIRECTIONS_UPDATED_ACTION)); 
     LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
         new IntentFilter(C.Broadcast.D_STOPS_UPDATED_ACTION)); 
     LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
         new IntentFilter(C.Broadcast.R_STOPS_UPDATED_ACTION)); 

     setupView(); //...and so on 

다음은 내 'activity_route_detail.xml'아래

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="5dp" > 

    <TextView 
     android:id="@+id/labelRoute" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/title_routes" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <Spinner 
     android:id="@+id/spinnerDirections" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:prompt="@string/choose_direction" /> 

    <Spinner 
     android:id="@+id/spinnerStops" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:prompt="@string/choose_stop" 
     android:spinnerMode="dialog" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:text="Upcoming rides" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <ListView 
     android:id="@+id/listViewPredictions" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <fragment 
     android:id="@+id/upcomingRidesFragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     class="com.thuptencho.transitbus.shared.UpcomingRidesFragment" 
     android:tag="UpcomingRidesFragment" /> 

</LinearLayout> 

가 내 ListFragment

package com.thuptencho.transitbus.shared; 

import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.View; 
import android.widget.ListView; 

import com.thuptencho.transitbus.R; 
import com.thuptencho.transitbus.routes.PredictionAdapter; 
import com.thuptencho.transitbus.utilities.L; 

public class UpcomingRidesFragment extends ListFragment { 

    private PredictionAdapter adapter; 


    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     L.log(); 
     adapter = new PredictionAdapter(getActivity(), R.layout.prediction_listview_item, null); 
     super.onActivityCreated(savedInstanceState); 
    } 
    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     L.log(); 
     super.onListItemClick(l, v, position, id); 

    } 

} 
다음

인 로그 캣 오류 메시지

06-23 05:30:51.121: E/AndroidRuntime(30608): FATAL EXCEPTION: main 
06-23 05:30:51.121: E/AndroidRuntime(30608): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thuptencho.transitbus/com.thuptencho.transitbus.routes.RouteDetailFragmentActivity}: android.view.InflateException: Binary XML file line #40: Error inflating class fragment 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.os.Looper.loop(Looper.java:137) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at java.lang.reflect.Method.invokeNative(Native Method) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at java.lang.reflect.Method.invoke(Method.java:511) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at dalvik.system.NativeStart.main(Native Method) 
06-23 05:30:51.121: E/AndroidRuntime(30608): Caused by: android.view.InflateException: Binary XML file line #40: Error inflating class fragment 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.Activity.setContentView(Activity.java:1881) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at com.thuptencho.transitbus.routes.RouteDetailFragmentActivity.onCreate(RouteDetailFragmentActivity.java:48) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.Activity.performCreate(Activity.java:5104) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
06-23 05:30:51.121: E/AndroidRuntime(30608): ... 11 more 
06-23 05:30:51.121: E/AndroidRuntime(30608): Caused by: java.lang.ClassCastException: com.thuptencho.transitbus.shared.UpcomingRidesFragment cannot be cast to android.app.Fragment 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.Fragment.instantiate(Fragment.java:585) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.Fragment.instantiate(Fragment.java:560) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.app.Activity.onCreateView(Activity.java:4709) 
06-23 05:30:51.121: E/AndroidRuntime(30608): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
+0

모든 가져 오기가 지원 패키지에서 이루어 졌는지 확인 했습니까? – Blackbelt

답변

3

RouteDetailFragmentActivity exten합니까입니다 d android.support.v4.app.FragmentActivity?

지원 라이브러리를 사용할 때는주의해야합니다. 일반적인 Activity, Fragment 등의 클래스는 지원 라이브러리의 클래스로 대체해야합니다. 계속하기 전에 this 페이지를 읽어야합니다.

+0

FragmentActivity를 사용하고 있습니다. import android.support.v4.app.FragmentActivity; – Thupten

0

com.thuptencho.transitbus.shared.UpcomingRidesFragment 확장은 android.support.v4.app.ListFragment이지만 일부는 android.app.Fragment..android.support.v4.app에 캐스트하려고 시도하고 있습니다. .Frgament.