2017-02-19 2 views
0

나는 이상한 오류가납니다. 내 코드에서 WorkoutDetailFragment를 WorkoutDetailFragment 유형의 개체로 캐스팅하려고합니다. 오류가 말을 DetailActivity라는 이름의이 클래스에서 발생하는변환 할 수없는 유형 Android

package com.hfad.workout; 

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.Fragment; 

public class WorkoutDetailFragment extends Fragment { 
    private long workoutId; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     if(savedInstanceState != null) 
     { 
      workoutId = savedInstanceState.getLong("workoutId"); 
     } 
     android.support.v4.app.FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 
     com.hfad.workout.StopwatchFragment stopwatchFragment = new com.hfad.workout.StopwatchFragment(); 
     ft.replace(R.id.stopwatch_container, stopwatchFragment); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.commit(); 
     return inflater.inflate(R.layout.fragment_workout_detail, container, false); 
    } 
    @Override 
    public void onStart(){ 
     super.onStart(); 
     View view = getView(); 
     if(view != null) 
     { 
      TextView title = (TextView) view.findViewById(R.id.textTitle); 
      Workout workout = Workout.workouts[(int) workoutId]; 
      title.setText(workout.getName()); 
      TextView description = (TextView) view.findViewById(R.id.textDescription); 
      description.setText(workout.getDescription()); 
     } 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) 
    { 
     savedInstanceState.putLong("workoutId", workoutId); 
    } 

    public void setWorkout(long id) 
    { 
     this.workoutId = id; 
    } 
} 

: 여기 WorkoutDetailFragment 코드입니다 "Inconvertable 유형; 'com.hfad.workout.WorkoutDetailFragment'에서 'android.app.Fragment'을 시전 할 수 없습니다. 여기 DetailActivity의 코드는, 내가 오류가 코드의 조각 위에 주석이 : 어떤 도움을 주시면 더 좋구요

package com.hfad.workout; 

    import android.app.Activity; 
    import android.os.Bundle; 

    public class DetailActivity extends Activity 
    { 
     public static final String EXTRA_WORKOUT_ID = "id"; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_detail); 
      //This is where the error occurs: 
WorkoutDetailFragment workoutDetailFragment = (WorkoutDetailFragment) getFragmentManager().findFragmentById(R.id.detail_frag); 
      int workoutId = (int) getIntent().getExtras().get(EXTRA_WORKOUT_ID); 
      workoutDetailFragment.setWorkout(workoutId); 
     } 
    } 

가, 다른 코드 또는 자세한 설명이 필요한 경우 알려 주시기를 :)

+1

DetailActivity가'AppCompatActivity'를 확장하고 getFragmentManager() 대신'getSupportFragmentManager()'를 사용하십시오. –

+0

대단히 감사합니다! – Aaron

답변

2

을 ​​사용해야합니다. 너가 지원 Fragment을 사용하면 다만 보통 활동의 대신에. 정규 액티비티는 지원 부분에 대해서는 아무것도 모르고 공통 조상을 공유하지 않습니다. 동일한 인터페이스 (실제로는 Interface 아님)를 준수해야합니다.

+0

감사합니다. – Aaron

관련 문제