2013-01-23 78 views
0

我有一個回調類gaGPS這就要求我覺得是在一個正常的活動能正常工作的上下文,但是當我在一個片段用它失敗Android的回調片段失敗,失敗,無法轉換爲android.content.Context

這裏是我的接口類

Public class gaGPS extends Service implements LocationListener { 

private final Context mContext; 

// Declaring a Location Manager 
protected LocationManager locationManager; 

private gaGPSinterface gpsu; 

public interface gaGPSinterface { 
    public void locationChanged(Location newloc); 
} 


public gaGPS(Context c, gaGPSinterface gpsiface) { 
    mCallback = gpsiface; 
    //mContext = (Context) gpsiface; 
    mContext = c; 


    locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); 
} 

剪斷

我使用這個FragmentActivity類

public class gaDetailsActivity extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gpsfragment); 

} 
啓動片段

這裏是gpsfragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".gpsfragment" > 
<fragment 
    android:id="@+id/gpsTestFragLayout" 
    android:name="id.wilsononline.gcadroid.gpsfragment" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" /> 

下面是我使用

public class gpsfragment extends Fragment implements gaGPS.gaGPSinterface { 

private gaGPS gps; 

@Override 
public void locationChanged(Location newloc) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onAttach(Activity activity) { 
    // TODO Auto-generated method stub 
    super.onAttach(activity); 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View rootView = inflater.inflate(R.layout.gpsdetails, container, false); 
    ((TextView) rootView.findViewById(R.id.gpsText1)).setText("testing fragment"); 

    Context c = getActivity().getApplicationContext(); 

    gps = new gaGPS(c, (gaGPSinterface) getActivity()); 

    return rootView; 
} 

}

錯誤我得到的片段是: 的java .lang.ClassCastException:com.test.app.gpsfragment無法轉換爲android.content.Context

更多更全面的輸出:

E/AndroidRuntime(3118): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
E/AndroidRuntime(3118):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
E/AndroidRuntime(3118):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
E/AndroidRuntime(3118):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
E/AndroidRuntime(3118):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
E/AndroidRuntime(3118):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
E/AndroidRuntime(3118):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256) 
E/AndroidRuntime(3118):  at android.com.test.app.Activity.setContentView(Activity.java:1867) 
E/AndroidRuntime(3118):  at id.wilsononline.gcadroid.gaDetailsActivity.onCreate(gaDetailsActivity.java:12) 
E/AndroidRuntime(3118):  at android.com.test.app.Activity.performCreate(Activity.java:5008) 
E/AndroidRuntime(3118):  at android.com.test.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
E/AndroidRuntime(3118):  at android.com.test.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
E/AndroidRuntime(3118):  ... 11 more 
E/AndroidRuntime(3118): Caused by: java.lang.ClassCastException: com.test.com.test.app.gaDetailsActivity cannot be cast to id.wilsononli 
ne.gcadroid.gaGPS$gaGPSinterface 
E/AndroidRuntime(3118):  at com.test.com.test.app.gpsfragment.onCreateView(gpsfragment.java:49) 
E/AndroidRuntime(3118):  at android.support.v4.com.test.app.Fragment.performCreateView(Fragment.java:1460) 
E/AndroidRuntime(3118):  at android.support.v4.com.test.app.FragmentManagerImpl.moveToState(FragmentManager.java:884) 
E/AndroidRuntime(3118):  at android.support.v4.com.test.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066) 
E/AndroidRuntime(3118):  at android.support.v4.com.test.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168) 
E/AndroidRuntime(3118):  at android.support.v4.com.test.app.FragmentActivity.onCreateView(FragmentActivity.java:280) 
E/AndroidRuntime(3118):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 
E/AndroidRuntime(3118):  ... 21 more 
+0

我們可以看到/ RES /佈局/gpsfragment.xml? –

+0

添加gpsfragment – mtraxdroid

回答

1
public gaGPS(gaGPSinterface gpsu) { 
    this.mContext = (Context) gpsu; 
    this.gpsu = gpsu; 
    // ... 
} 

在這裏,你想投gpsuContext。這不是一個;這是一個Fragment。你應該通過ContextgaGPSinterface分開:

public gaGPS(Context c, gaGPSinterface gpsu) { 
    this.mContext = c; 
    this.gpsu = gpsu; 
    // ... 
} 

然後,使用.getActivity()把它從Fragment(它返回一個ActivityContext一個子類):

gps = new gaGPS(getActivity(), this); 
+0

好吧我會試一試,但我的第一個直覺是,這將失敗,因爲我得到了片段中的轉換錯誤,而不是接口類 – mtraxdroid

+0

不能:「'at com.test.app.gaGPS (gaGPS.java:55)'「(來自您的堆棧跟蹤)。 'Fragment'不能膨脹,因爲這個異常(作爲執行的一部分拋出)存在。 – Eric

+0

好的,謝謝,這些堆棧痕跡有時候很難讀取。 – mtraxdroid